viernes, 2 de octubre de 2009

Sopa de piedra

Hola amigos:

Habrán notado que hace un buen tiempo que no escribo en mi blog, la verdad es que he andado sumamente atareado y es poco el tiempo que me queda para escribir.

Pensando en que a estas fechas ya debe haber muchos colegas encaminados por el "bajo mundo" de ADO y MySql, las estadísticas indican mas de 7,000 visitas a menos de un año, y a falta de tiempo para escribir se me ha ocurrido la idea de hacer una "sopa de piedra".

La idea es abrir este blog para que quien este interesado y quiera contarnos sus experiencias pueda escrribirlas aquí.

De esta forma crecerá el acervo y muchos podremos aprovechar los conocimientos y experiencia, buenas y malas, de todos nosotros.

"La bondad es la única riqueza del ser humano que crece y se multiplica cuanto más la derrochamos".

Espero sus comentarios al respecto.

Hasta la próxima amigos

9 comentarios:

Carlos Sincuir dijo...

Hola a todos.
He utilizado ADO para acceder a SQL Server para traer información desde xHarbour y FWH, y ha funcionado bien.
Pero ahora estoy parado en querer insertar imagenes a SQL Server, y no he podido hacerlo, ya que no me reconece la opcion de Add de Parameters, del objeto command, y he estado con la duda de que si se puede hacer con ADO y nuestras herramientas.
El código que estoy utilizando es:
...................................
LOCAL oConnect := TOLEAUTO():New("adodb.connection")
LOCAL oCommand := TOLEAUTO():New("adodb.command")
LOCAL strConn, oErr, cSql, cImagen

strconn := 'Driver={SQL Server};Server='+AllTrim(oApp:oPara:cHost)+;
';Uid='+AllTrim(oApp:oPara:cUser)+';Pwd='+AllTrim(oApp:oPara:cPass)+';'+;
"initial catalog=basesql"

oConnect:Open( strconn )

cSql := "INSERT INTO invenfoto ( id_codigo, foto ) VALUES ( @Codigo, @Imagen )"
oCommand:ActiveConnection := oConnect
oCommand:CommandText := cSql

cImagen := TRAERIMAGEFROMFILE( "g:\sis\imagenes\LogoE.bmp" )

oCommand:Parameters:Add("@Codigo",3)
oCommand:Parameters("@Codigo"):Value = 2
oCommand:Parameters:AddWithValue("@Imagen", cImagen )

oCommand:ExecuteNonQuery()
..............................

Pues, eso es lo que me tiene entretenido últimamente, pero creo que no voy a poder hacerlo funcionar con xHarbour + FWH

Saludos cordiales.

Carlos Sincuir

Armando dijo...

Carlos:

No tengo un ejemplo que mostrarte sin embargo me parece que en el foro de FW hay algunas preguntas y respuestas al respecto, busca por campos BLOB

Saludos

Armando dijo...

Carlos:

No tengo un ejemplo que mostrarte sin embargo me parece que en el foro de FW hay algunas preguntas y respuestas al respecto, busca por campos BLOB

Saludos

Carlos Sincuir dijo...

Hola Armando, gracias por tus comentario.

Pues fijatge que mi problema no es tanto el de convertir la imagen, si no que cuando quiero utilizar el comando Add() del método Parameters del adodb.command no me lo acepta, me dice que no esta definido.

El codigo que mostre, es lo que estoy tratando de trasladar a xharbour+FWH de otro hecho von Visual Basic 2005, en donde se utiliza los comando ADO que estoy colocando, que si quieren lo puedo mostrar para que lo vean.

Creo que el problema es porque adodb no tiene esas opciones con el objeto command, por lo que estoy tratando de buscar un manual de adodb para conocer sus clases y metodos, etc., pero no he encontrado nada aún.

Saludos cordiales.

Carlos Sincuir

Carlos Sincuir dijo...

Armando.
Siguiendo con las pruebas, logre averiguar como agregar parametros con ADODb, pero cuando intento correr la secuencia, me da un error en el oCammand:Execute()
Mira el codigo:

//-----
LOCAL oConnect := TOLEAUTO():New("adodb.connection")
LOCAL oCommand := TOLEAUTO():New("adodb.command")
LOCAL oParamet := TOLEAUTO():New("adodb.parameter")
..
..Sigo con la secuencia de coneccion, y todo bien.
..
//Preparo los parametros
cSql := "INSERT INTO invenfoto ( id_codigo ) VALUES ( @Codigo )"

oCommand:ActiveConnection := oConnect
oCommand:CommandType := 1
oCommand:CommandText := cSql

oParamet:Type = 3 //Integer
oParamet:Direction = 1 //adParamInput

oCommand:Parameters:Append( oParamet )

oCommand:Parameters(0):Value := 2

//Y en la siguiente linea me da el error
oCommand:Execute() //El error es Execute no definido


Porque no funcionara el Execute del command?

Saludos cordiales.

Carlos Sincuir

Armando dijo...

Carlos:

Muy poco puedo apoyarte pues como podras ver yo uso ADO puro, de ADOdb ni jota.

Con ADO la sintaxis es

cCmdSql := "INSERT INTO " + etc
oApp:oCon:Execute(cCmdSql)

Donde:

oApp:oCon = el objeto conexion
y cCmdSql = El comando a ejecutar.

Espero esto te apoye en algo.

Saludos

Anónimo dijo...

Hola Armando,

He seguido todos los ejemplos en tu blog y los he encontrado muy útiles. Muchas gracias. Una pregunta: Tengo una tabla de 121.000 registros, y a través de adsl me tarda 2 minutos en cargar un xbrowse. He visto en una entrada tuya que usas PageSize y CacheSize. ¿Es para cargar solo un recordset con los datos que se van a mostrar en el xbrowse? ¿Me puedes orientar un poco es este aspecto?

Muchas gracias.
Alvaro

Armando dijo...

Alvaro:

Lo aconsejable es que no muestres toda la Tabla en un browse, es recomendable mostrar solo parte, por ejemplo muestra solo los registros del presente año y del presente mes permitiendo al usuario elegir mostrar otro mes u otro año.

PageSize = Define el número de registros o filas que forman una página. Por defecto son 10.

CacheSize = Define el número de registros o filas que el Recordset va a pre-almacenar en la memoria caché.

Echale un ojo a este link

http://www.aspfacil.com/articulos/040401.asp

Saludos

Anónimo dijo...

Felicidades por este blog, la verdad tiene informacion bastante exacta y de mucha ayuda para los programadores que estamos trabajando con xharbour. Quisiera saber si alguien me podria ayudar en el siguiente problema, tengo mysql montado en un servidor linux y tengo clientes windows xp, deseo conectarme a la base desde xharbour en un programa en modo consola y la verdad no se, si se puede realizar, alguien me puede ayudar con un ejemplo de conexion a la base?

Muchas gracias de antemano.