code inside
La tecnología de lo Obio

Dice Cornejo, que hay que imitar al mejor, igualar al mejor y superar al mejor, esto me trae mucho agrado recordarlo por que fui uno de los que bajaba los mp3s de cornejo, Miguel Angel Cornejo, y los escuchaba una y Cien mil veces para sentirme positivo todo el día, pero eso era cuando era mas joven digamos 22,23,24 años, cuando tu mente aun no se estabiliza del todo, ya cuando estas mas maduro, sabes lo que quieres y punto. Plata. jajaja. Esto me trae el hecho de compartir informacion de lo que sabes, la gente a veces es egoista y no quieren decir por miedo a quedarse atraz que tu le saques ventaja y que sean mejores que tu... esto es la vasenilla de la mediocridad y te voy a explicar porque, mira si yo se como hacer una cosa, o tengo un metodo de hacer algo, quizas piense que al no decirtelo tu no lo sabras, pero eso sera si tu no quieres saberlo si tu mediocridad no te da para seguir investigando solo porque otro te dijo "mira no se", en cambio si tu compartes lo que sabes, que te obliga esta situación?, a MEJORAR!!!, a buscar otra forma de hacerlo porque la que sabias ya otro la sabe y como eres un nato competidor buscaras y buscaras mil formas de hacerlo y mejor, en cambio si no dices nada te estancas, te queda con una forma de hacerlo porque te sientes seguro que la otra persona no sabe hacerlo, pero se estancan tu y el otro porque el mundo sigue caminando, al final los estancados seran tu, que te quedaste con tu Unique Metodo. Recuerdalo comparte informacion, no es lo mismo que compartir la logica de programador esto se gana con tropezones y no se puede transferir por mas que quieras.

Go ahead!!!

Add Comment Filed Under [ code inside ]
Typo de dato predefinido al exportar o hacer un select de un archivo csv

Suele suceder que si queremos hacer un "select * from [Archivo.csv]", y por decir el mismo tiene dentro de su data delimitada, un campo fecha, que trajedia tu pusiste en tu archivo de texto la fecha asi dd/MM/yyyy y cuando estas depurando o en VB te aparece asi, MM/dd/yyyy y no hay manera de formatear esa vaina, por mas CDAte, por mas Format (fecha,'dd/mm/yyyy'), el query de salida asume lo que le da la gana porque se basa en detectar el tipo de dato que encuentra, y ya haz cambiado la configuracion regional a todos los paises buscando la alternativa, inclusive agregaste esto pensando que se hiba a poner asi

Dim

culture = New System.Globalization.CultureInfo("es-ES", True)

Dim

s As String

s = System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern

y cuando estuviste debugueando, y pasaste por la variable s te salio "dd/MM/yyyy" y dijiste "Ahora si!!!", pero cuando paso por tu select, te lo devolvio, mm/dd/yyyy, estas al borde de la locura estas optando por usar otra forma de lectura de tu csv, trankilo todo se debe a tu motor "Provider=Microsoft.Jet.OLEDB.4.0;

El como es de la familia de access viran las vainas como les da la gana y te ponen las cosas como ellos quieren afortunadamente existe una solucion, simple en el regedit, buscate la cadena siguiente, HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\4.0\Engines\Text , AQUI BUSCA IMPORTMIXEDTYPES, Y PONLA EN TEXT, LUEGO BUSCA AHI MISMO LA QUE DICE MAXSCANROWS Y PONLA EN 0, ADICIONAL POR CUALQUIER VAINA AGREGATE EN TU CONEXION STRING EL IMEX=1;

";Extended Properties=""text;HDR=Yes;FMT=Delimited;IMEX=1;"""

Hay bastante info de esto en internet, yo lo que hice para no afectar a otras aplicaciones es cambiarlo en tiempo de ejecucion desde el Vb.net

Dim

Dim

ver As String ver2 As String

regKey = Registry.LocalMachine.OpenSubKey("Software\Microsoft\Jet\4.0\Engines\Text",

ver = regKey.GetValue("ImportMixedTypes")

True)', "Majority Type")

ver2 = regKey.GetValue("MaxScanRows")

regKey.SetValue("ImportMixedTypes", "Text")

regKey.SetValue("MaxScanRows", "0", RegistryValueKind.DWord)

regKey.Flush()

ya con esto lo pongo y lo vuelvo a poner pero ojo necesitas darle permiso de escritura al usuario en curso desde el regedit sino te va a reventar.

One Comment Filed Under [ code inside ]
Actualizar contenido html de vs2003 a 2005 o 2008

Para actualizar el contenido html a una version mas reciente de vs, debes presionar en el codigo html CTRL+K+D, y listo no es la gran cosa pero ayuda.

Add Comment Filed Under [ code inside ]
Devolviendo mas de un registro con cursores en pl/sql
 
Probablemente como programador hayas usado sql server y sus procedimientos almacenados, para nosotros era fácil traer un monton de datos con un stored procedure, probablemente si querias traer 1000 registros de la tabla misdatos
hacias asi.
 procedure misdatos()
Begin
select * from misdatos
End
Esto te devuelve todos tus datos desde donde lo ejecutes, pero si lo haces en oracle no te va a devolver nada, estoy seguro te devolvera un gran error.
Tienes que crear un cursor dentro de tu sp, despues amarras tu sp con un package asi.
Primero Creas el SP
CREATE OR REPLACE PROCEDURE proyecto1 (curout out estrenoarturo.CURSOR_RESULTS)
is
BEGIN
OPEN curout
FOR
SELECT numero_medidor from mediciones where numero_cliente = 693592
END;
 
Ya con esto tenemos listo el sp va a devolver todos los registros que tenga.
Ahora lo amarramos con un paquete.
CREATE
OR REPLACE PACKAGE estrenoarturo
AS
END
TYPE CURSOR_RESULTS IS REF CURSOR; estrenoarturo;
YA tenemos el paquete ahora lo llamamos!!!!
--1 ejecutando el package
DECLARE
v_cursor
estrenoarturo.cursor_results;
v_ename
varchar2(100);
BEGIN
proyecto1 (v_cursor);
LOOP FETCH v_cursorINTO v_ename;
EXIT WHEN v_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE
( v_ename );
END LOOP;
END;
CLOSE v_cursor;
Sencillo no? jajajaja con esto te vas a querer quedar con sql server
Add Comment Filed Under [ code inside ]
Como crear una Bitacora para tu proyecto

Creando tu propia bitacora

 public void Log(string filePath, string input)
        {
            FileInfo logFile = new FileInfo(filePath);
            FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
            StreamWriter w = new StreamWriter(fs);
            w.BaseStream.Seek(0, SeekOrigin.End);
            w.WriteLine(String.Format("{0} {1} : {2}", "Log: ", DateTime.Now, input));
            w.Flush();
            w.Close();
        }

        string pathLog = String.Format("{0}LogFile-{1}.txt", System.Configuration.ConfigurationManager.AppSettings["pathItinerarioLogFile"], DateTime.Now.ToString("yyyyMMdd"));


Luego lo llamamos

Log(pathLog,"Ha ocurrido un error en el metodo XXXX")

4 Comments Filed Under [ code inside ]
Dale Performance a tus DataSets Typados

 Mucho se habla de que los datasets de por si son lentos y hacen el proceso muy problematico aunque su programacion es relativamente facil, separas todo y con unas pocas lineas(1) haces un insert update o delete, aqui te voy a enseñar como puedes agregarle performance a la hora se hacer Insert  y Update Masivos, mira una vez creados tus datasets tipados, tienes que agregar una funcion que salio apartir del framework 2.0 UpdateBatchSize, esta funcion tiene valores, 0 como el maximo permitido por lote 1, si se envian de uno a uno, y >1 la cantidad de lotes a enviar, sencillo no, ahora, si lo haces uno a uno tendras que enviar si haces un insert de 10,000 de registros, tendras que enviarlos 10,000 mil veces y las 10,000 veces llamaras al servidor esto pone un performance desastrozo. Si lo haces igual a =0, el mandara el maximo permitido por tu servidor, si tu servidor aguanta un maximo de 5000 registros , el mandara  cada 5000 registros enviara el lote de inserts, esto pone tu servidor a trabajar un poco, pero lo ayudas por otro lado, puedes ponerlo en un default de 1000, que es lo que comunmente se utiliza.

Por ahora todo bien ahora veamos tu codigo.

Antes de hacer tu Update agrega esto.

 

 upco.Adapter.UpdateBatchSize = 1000;

 if (da.Adapter.SelectCommand != null)
            {
                da.Adapter.SelectCommand.CommandTimeout = 0;
            }

            if (upco.Adapter.UpdateCommand != null)
            {

                upco.Adapter.UpdateCommand.UpdatedRowSource = UpdateRowSource.None;
                upco.Adapter.UpdateCommand.CommandTimeout = 0;

            }

            if (insco.Adapter.InsertCommand != null)
            {

                 insco.Adapter.InsertCommand.UpdatedRowSource = UpdateRowSource.None;
                insco.Adapter.InsertCommand.CommandTimeout = 0;

            } upco.Update(ahorasi ejecuta tu update)

Si lo hiciste mal en el tipado te va  a reventar con un null en el UpdateRowSource, 

Te recomiendo que crees tu metodo en dataset tipado con los comandos FILL y GET solamente no agregues nada mas y en las propiedades del tipado donde estan los SelectCommand, InsertCommand, UpdateCommand, DeleteCommand ahi metes tu codigo para determinado caso, de esta forma cuando pases por aqui va a ser diferente de null. 

Lo probé y puse ambos escenarios, el performances va de un 10% a un 20%.En tiempo. 

One Comment Filed Under [ code inside ]
No puedo activar el firewall de windows El servicio de firewall de windows/conexión compartida a internet (ICS) no ha podido iniciarse

Este error se corrige aplicando desde el msdos o restaurando el codigo de seguridad asi, desde el cmd en el dos:

SC sdset SharedAccess D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)

Le das Enter, Despues vuelve a ejecutar el firewall de windows para ver si se te habilito.

Para mayor referencia:

http://support.microsoft.com/kb/892199/es

Add Comment Filed Under [ code inside ]
if Exists pl/sql

Verificamos la cantidad en la tabla mensaje, si existe, (devuelve 1 si existe)
select count(*) from mensaje m where exists(select 1 from ordenes o )
andm.mensaje=:var1

One Comment Filed Under [ code inside ]
Seleccionar la fecha mas grande de dos tablas select Max(date1)
Esta es la forma de seleccionar la fecha maxima de dos tablas que contienen el mismo campo en pl / sql
select max(v.Date_1) from
(select max(fecha_pago) as Date_1 from pagos_totales
where num_cliente=693591
Union all
Select max(fecha_pago)
from historia where num_cliente=693591)  v
Add Comment Filed Under [ code inside ]
Leer un archivo txt omitiendo saltos de linea y espacios en blanco

Hola

Existe una forma sencilla de omitir los espacios en blanco, saltos de linea y toda la basura que nos da problema a la hora de leer el archivo de texto.

 While Not EOF(Filem)
         Line Input #Filem, reg_detalle

If Len(Trim(reg_detalle)) > 0 And reg_detalle <> Chr(13) Then

'Cuerpo del programa

End If

Wend

2 Comments Filed Under [ code inside ]
Reporting services (IIf)

 

Estoy haciendo un reporte y quiero que en una de sus celdas valide si el campo es nulo o vacio que coloque None o Ninguno.

Lo hacemos así

=IIf (Fields!CIRCUITO_INSTALADO.Value is Nothing,"-None-",Fields!CIRCUITO_INSTALADO.Value)

7 Comments Filed Under [ code inside ]
CDONTS Enviar Emails

Una forma un tanto tradicional para el envio de correos es utilizando esta libreria cdonts.dll, debidamente registrada en C:\windows\system32, con RegSvr32 cdonts.dll desde el cmd line del msdos, una vez registrada se dispone de la misma, podemos utilizar codigo vbscript para generar y enviar correos.

Todavia si utilizas dts, y deseas enviar emails puedes utilizar este vbscript o con paginas asp utilizando vbscript tambien.

Function Main()

 Dim objMail


 set objMail  = createobject("CDONTS.NewMail")
 objMail.From = DTSGlobalVariables("From").Value
 objMail.To =DTSGlobalVariables("To").Value
 objMail.Cc = DTSGlobalVariables("Cc").Value
 objMail.Subject = "autopartes- Error en el Proceso de Carga de Datos" & date()
 objMail.HtmlBody = "Error en el proceso de carga al intentar guardar en la BD. Favor Verificar"
 objMail.Send
 set objMail = Nothing

 Main = DTSTaskExecResult_Success

End Function


Add Comment Filed Under [ code inside ]
Leyendo un archivo de excel con un worksheet name dinamico

static void Main(string[] args)
{
consola.cobranzaTableAdapters.realDataTableAdapter da =
new consola.cobranzaTableAdapters.realDataTableAdapter();
int conta = 0;
System.Globalization.CultureInfo CurrentCI = System.Threading.Thread.
CurrentThread.CurrentCulture;
System.Threading.Thread.CurrentThread.CurrentCulture =
new System.Globalization.CultureInfo("es-PA");
OleDbConnection dbConn = null;
System.Data.DataTable resultTable = new System.Data.DataTable();
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source="
+ "C:\\clientes.xls" + ";Extended Properties=Excel 8.0;"
;
dbConn = new OleDbConnection(connString);
dbConn.Open();
DataSet dtReal = new DataSet();
dtReal.Merge(da.GetData());
DataTable drxxx = dbConn.GetSchema("Tables");
DataRow drx = dbConn.GetSchema("Tables").Rows[0];
string tableName = string.Empty;
string hoja = string.Empty;
string hojaescojida = drx.ItemArray[2].ToString();
string sheetName = hoja;
string query = "SELECT value  FROM " + "[" + hojaescojida + "]";
int num = 0;
int cont = 0;
int cont2 = 0;
int rx = 0;
OleDbDataAdapter adapter = new OleDbDataAdapter(query, dbConn);
DataSet rs = new DataSet
adapter.Fill(rs);

}

2 Comments Filed Under [ code inside ]
Ciclos for
Si tenemos que buscar en dos dataset un valor es facil simplemente recorremos con uno en un ciclo for y recorremos en otro con un ciclo for.
despues con sus indicices y valores a comparar matcheamos que sean iguales.
Pero punto net tiene las cosas mas faciles aun...
Antes lo haciamos asi.
for (int c=0;i<ds.tables[0].rows.count; c++)
{
string nombre=ds["Nombre"].Tostring();
for (int a=0;a<ds2.tables[0].rows.count;a++)
{
string name=ds2["Nombre"].ToStringg();
Comparacion...
if (nombre[c]==name[a])
{
..haz esto
}
 
}
}
Esto es una forma facil y sencilla de recorrer un dataset.
Pero .net mejor esto.
{foreach (DataRow numeroCliente in dtReal.Tables[0].Rows)
}
 DataRow[] row = rs.Tables[0].Select(string.Format("nic='{0}'", rx));
 
 
Con esta ultima sentencia evitamos crear un ciclo for nuevamente, con lo que consumimos menos recursos y ademas pruebalo es mas rapido.
Add Comment Filed Under [ code inside ]
Cursores The NightMare PL/SQL

Para crear un cursor en Pl/sql, que casi siempre es necesario no es tan dificil como a veces pensamos que este puede llegar a serlo. Para crear un cursor explicito, debemos hacer asi.

Declare  
nic integer;
cursor nik
is

 select cliente.numero_cliente as cliente
     from cliente, AMERICA, TABLA T, cliente_deu, COBROS CO
     wHERE CLIENTE.ESTADO_SUMINISTRO = 1
     AND CLIENTE.ESTADO_CLIENTE = 2 AND CLIENTE.NUMERO_CLIENTE = AMERICA.NUMERO_CLIENTE
     AND T.NOMTABLA(+) = 'munici' AND CLIENTE.MUNICIPIO = T.CODIGO(+) AND T.SUCURSAL(+) = '0000'
     AND CLIENTE.NUMERO_CLIENTE = CLIENTE_DEU.NUMERO_CLIENTE AND CLIENTE_DEU.DEUDA_TOTAL > 10.00
     and  CLIENTE.numero_cliente = CO.numero_cliente(+);  
  

 

Begin


 OPEN nik;
   LOOP
      FETCH nik INTO nic;
      EXIT WHEN nik%NOTFOUND;
      DBMS_OUTPUT.PUT_LINE(nic);
   END LOOP;
   CLOSE nik;
  
 End;

 

 

También puedes hacerlo de esta forma con un ciclo for.
  
--  FOR c IN nik
--  LOOP
--     dbms_output.put_line('Row Number '||c.VALOR_SANCION);
--  END LOOP;
--   
-- End;
 

One Comment Filed Under [ code inside ]
Setear el Lenguaje Regional

Si queremos setear directamente la cultura antes de cualquier bloque lo podemos hacer asi.

 

Recordemos que esto requiere de.

using System.Globalization.

 

System.Globalization;CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture;System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("es-PA");
2 Comments Filed Under [ code inside ]
Xsl-Xml-Html

El uso del xml, ha sido y es cada vez mas utilizado, en parte se debe al hecho de que xml es como si fuera texto plano, portable y configurable, puedes crear la estructura que quieras sin restricciones y a la escala que quieras. Puedes crear una estructura como

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="format-family.xsl"?>

<Familia>
<first>
 <Papa>Juan B. Gomez</Papa>
 <Hijo>Jose Carlos Gomez</Hijo>
</first>

<first>
 <Papa>Jose Arturo Pittí</Papa>
 <Hijo>Kalel Arturo Pittí </Hijo>
</first>
</Familia>

Esto es un xml sencillo y basico, aqui podremos guardar data.
Imaginate ahora otro archivo que señale el formato a tu xml, es decir algo como un stylesheet, que lo configurabas y cuando lo llamabas aplicabas la configuracion que querias es decir, tipo de letra, color, boton, etc etc. Pasa lo mismo aca.
Ahora creamos nuestro XSL

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method='html' version='1.0' encoding='UTF-8' indent='yes'/>

<xsl:template match="/">
  <html>
  <body>
  <h2>My Familia</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th align="left">Papa</th>
        <th align="left">Hijo</th>
      </tr>
      <xsl:for-each select="Familia/first">
      <tr>
        <td><xsl:value-of select="Papa"/></td>
        <td><xsl:value-of select="Hijo"/></td>
      </tr>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

Ahora lo aplicamos, creamos nuestra aplicacion y adicionamos el siguiente codigo y listo se generará el html que queremos.

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Xml;
using System.Xml.Xsl;
using System.Xml.XPath;
namespace SortXML
{
{
class Program
 
static void Main(string[] args)
{
xsltr.Load("format-family.xsl");
XslCompiledTransform xsltr = new XslCompiledTransform()
xsltr.Transform("familia.xml", "family.html");

 

Console.ReadLine();

}
}
}
Console.WriteLine("Press any key to continue...");
Add Comment Filed Under [ code inside ]
len en T-SQL- Case When

En c# las cosas son mas faciles... depende a que te dediques más, por ejemplo en c#, facilmente yo puedo hacer algo como esto,

if (mydato.length)==1

mydato="0"+mydato

Para este caso suponiendo que quisiera agregar un "0" a los numeros del 0-9 para mantener que sean de dos digitos.

Pero en t-sql tendria que hacer algo como esto

SELECT

Case LEN(myDato) When 3 Then '0' + CAST(myDato AS VARCHAR(5))

Else CAST(myDatoAS VARCHAR(4)) End as myDato FROM Datos

En caso de que myDato sea tipo integer, lo casteamos.

2 Comments Filed Under [ code inside ]
error [rsReportServerDisabled error] -Reporting Services

Este es un error del reporting services 2000 y ocurre cuando lo estas instalando, despues de instalarlo cuando vas a ver los informes, como que hay un conflicto de llaves y tienes que volver a generarlo. Para que no desinstales de nuevo el reporting services hay una solucion, que vi en el blog e Fran Díaz.

Abrimos la consola (inicio-->ejecutar-->cmd en vista solo poner cmd en la búsqueda) y escribimos esto:

cd C:\archvios de programa\Microsoft SQL Server\80\Tools\Binn 
Luego ejecutamos esta otra sentencia:

rsactivate -r -c"C:\Archivos de programa\Microsoft SQL Server\MSSQL\Reporting Services\ReportServer\RSReportServer.config"

C:\Program Files\Microsoft SQL Server\80\Tools\Bin>rsactivate -r -c "C:\Program

Files\Microsoft SQL Server\MSSQL\Reporting Services\ReportServer\RSReportServer.

config"

The command completed successfully

 

C:\Program Files\Microsoft SQL Server\80\Tools\Bin>

 

3 Comments Filed Under [ code inside ]
Cursor en T-SQL

Este es un ejemplo de un cursor en T-SQL, simple y sencillo que hace un Update a la tabla

BEGIN TRAN
-- Declare the cursor
DECLARE MyProducts CURSOR
FORWARD_ONLY
FOR
SELECT Cantidad, Existencia
FROM registrarmercancia
WHERE codigo='CB-SUC44'
 
-- Open the cursor
OPEN MyProducts
-- Fetch the first row
 
 
FETCH NEXT FROM MyProducts
update registrarmercancia
set existencia =existencia+cantidad
where current of MyProducts
-- Close the cursor
CLOSE MyProducts
-- Deallocate the cursor
DEALLOCATE MyProducts
--ROLLBACK TRAN
 
One Comment Filed Under [ code inside ]