Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-07-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
uso del IBDataSet

¿Podría alguien explicarme el uso del componente IBDataSet?

Estoy pasando una aplicación de paradox a interbase 7 con delphi 6. Al pasar de TTable (paradox), a TIBTable ( interbase), me va muy lento, y como necesito insertar registros a las tablas, no puedo usar los query.

Me han dicho que muchos de mis problemas se pueden solucionar si uso estos otros componentes, los IBDataSet, pero me pierdo con las propiedades, de InsertSQL, ModifySQL, DEleteSQL y Refresh SQL.

¿Podría alguien ayudarme con un ejemplo sencillo?, es sólo para hacerme una idea a partir de la cual poder trabajar.

Y si podeis explicarme más cosas al respecto... cualquier ayuda será muy de agradecer, pues estoy muy pez en esto.

GRacias

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #2  
Antiguo 25-07-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Bueno, es sencillo. Como tu dices, solo tienes que informar las propiedades que comentas con sentencias SQL validas.

Te pongo un ejemplo de SQL validos para cada una de esas propiedades

Código:
    TEmpreses.SelectSQL.Text := 'select * from EMPRESES';
    TEmpreses.RefreshSQL.Text := 'select * from EMPRESES';
    TEmpreses.ModifySQL.Text := 'update EMPRESES ' +
                   'set ' +
                   '  NOM = :NOM, ' +
                   '  ADRESA = :ADRESA, ' +
                   '  ID_PAIS = :ID_PAIS, ' +
                   '  TELEFON = :TELEFON, ' +
                   '  FAX = :FAX, ' +
                   '  ID_MONEDA = :ID_MONEDA ' +
                   'where ' +
                   '  ID_EMPRESA = :OLD_ID_EMPRESA';
    TEmpreses.InsertSQL.Text := 'insert into EMPRESES ' +
                   '  (ID_EMPRESA, NOM, ADRESA, ID_PAIS, TELEFON, FAX, ' +
                   '   ID_MONEDA) ' +
                   'values ' +
                   '  (:ID_EMPRESA, :NOM, :ADRESA, :ID_PAIS, :TELEFON, ' +
                   '   :FAX, :ID_MONEDA)';
    TEmpreses.DeleteSQL.Text := 'delete from EMPRESES ' +
                   'where ' +
                   '  ID_EMPRESA = :OLD_ID_EMPRESA';
Cualquier campo que no pongas en las sentencias de Insert o Modifi, no se añadira o modificara en tu tabla

Un "truco" para saber las sentencias que tienes que escribir en cada lado (mas o menos ya que se puede quitar algun campo) es poner un TIBQuery y un TIBUpdateSQL y unirlos mediante la propiedad UpdateObject del TIBQuery, informar la clausula SQL del TIBQuery con algo parecido a ...

select * from tabla

hacer doble clic al TIBUpdateSQL y darle al boton de "Generate SQL"

Esto te ayudara ha darte una idea de los distintos SQL que tienes que poner en cada sentencia

Bueno, espero te sirva

Última edición por __cadetill fecha: 25-07-2003 a las 15:52:20.
Responder Con Cita
  #3  
Antiguo 25-07-2003
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 21
Giniromero Va por buen camino
Muchas gracias por tu ayuda.

Por cierto, ¿que diferencia hay entre usar estos dos componentes que me indicas, (tIBQuery y TIBUpdateSQL) y usar directamente el IBDataSet?

Por lo que he podido leer en el foro, es parecido, pero en general aconsejan el IBDataSet. ¿Sabes por qué?

Saludos

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)
Responder Con Cita
  #4  
Antiguo 25-07-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Pues sinceramente,... no

Yo lo utilizo ya que de esta manera tengo los 2 en 1 y, no se, lo encuentro mas fexible que la union de los 2

A ver si alguno de los gurus que hay por aqui puede explicarnos la diferencia entre ellos

Suerte con tu migracion
Responder Con Cita
  #5  
Antiguo 27-07-2003
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
por favor, puedes especificar mas como usar los paramtros en las consultas de modificar y borrar y insertar? se refieren a DBEdits o son variables Delphi creados por el usuario? gracias..
Responder Con Cita
  #6  
Antiguo 27-07-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
no, a ver, los parametros de las consultas SQL son campos de la tabla, es decir, el nombre de los campos, nunca ni TDBEdits ni variables.

No se si con esto voy a liarte mas, pero a ver. Cuando tu lanzas un insert, delete o update, lo que has de especificar en el componente son los nombres de los campos. Otra cosa es si lo hacer por código mediante un TIBQuery. En él podrias poner algo como

Código:
IBQuery1.Sql.Add('insert into MyTabla (MyNameField1, MyNameField2, MyNameField3)');
IBQuery1.Sql.Add('values (:Var1, :Var2, :Var3)');
Donde var1, var2, var3 son parametros de tu query y que, aqui si, pueden tener el nombre que mas te guste. Pero cuando se trata del TIBDataset, tienes que poner los nombres reales de los campos detu tabla

Espero que con esta corta explicacion te queda algo mas claro el uso de este componente

EDIT : me he dejado los ':' en la sentencia SQL

Última edición por __cadetill fecha: 27-07-2003 a las 20:17:32.
Responder Con Cita
  #7  
Antiguo 27-07-2003
Delfino Delfino is offline
Miembro
 
Registrado: jul 2003
Ubicación: Madrid
Posts: 974
Poder: 21
Delfino Va por buen camino
lo q quise preguntarte era q cuando pones
"delete from EMPRESES where ID_EMPRES = :OLD_ID_EMPRESA;"
q es :OLD_ID_EMPRESA? lo mismo para update y insert, no entendi q son esos identificadores precedidos de dos puntos ":"? por eso supuse q son parametros.
por cierto sigue sin funcionarme el IBDtatSet, no se si soy tan torpe pq dicen q es sencillo de usar, gracias
Responder Con Cita
  #8  
Antiguo 27-07-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
bueno, de echo sí que son parametros, pero que se encarga el mismo componente de rellenar

Para saber las clausulas SQL que tienes que poner en cada una de las propiedades, intenta seguir lo que comentaba sobre el TIBQuery y el TIBUpdateQuery en el post anterior. Lo unico a tener en cuenta es que (almenos yo) saco de la clausula where los campos que no forman parte del indice primario

Si sigues con dudas, pregunta
Responder Con Cita
  #9  
Antiguo 01-08-2003
Avatar de hgiacobone
hgiacobone hgiacobone is offline
Miembro
 
Registrado: may 2003
Ubicación: La Plata, Bs. As., Argentina
Posts: 165
Poder: 21
hgiacobone Va por buen camino
Disculpen...
y digo yo, ¿Esto es igual para utilizarlo con un TADODataSet?
__________________
Gracias de antemano por vuestra ayuda.
·.:*:.·Yako·.:*:.·
Responder Con Cita
  #10  
Antiguo 01-08-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Pues no creo, mas que nada porque un TADODataset no tiene estas propiedades. Nunca he trabajado con ADO, asi que no te sabria decir. A ver si alguno de los compañeros que sí trabaja con ellos puede indicarte mejor que yo
Responder Con Cita
  #11  
Antiguo 01-08-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Bueno, como ya he dicho, no he utilizado nunca ADO, pero le he dado una ojeada y lo que he visto es esto

Pones un TADOConnection y un TADODataset. Informas el TADOConection con la conexion pertinente y lo enlazas al TADODataset mediante la propiedad Connection de éste. Seleccionas la propiedad CommandText y veras que te aparecera un boton con tres puntos. Le das a ellos y te mostrara una pantalla donde seleccionas las select que quieras

NOTA : si el TADOConnecion lo tienes activo, te aparecera el nombre de las tablas disponibles

Bien, en principio con este simple paso ya puedes añadir, modificar y borrar registros de la tabla seleccionada

Supongo que habran mas cosillas, pero asi, a simple vista, ese es su funcionamiento

Espero te sirva
Responder Con Cita
  #12  
Antiguo 08-12-2005
Equinoxe Equinoxe is offline
Miembro
 
Registrado: dic 2005
Posts: 17
Poder: 0
Equinoxe Va por buen camino
Información incompleta

Por culpa de hilos así muchos usuarios se pierden.

El uso del IBDataset es más complejo de lo que se ha dicho en este foro, además de que la documentación acerca de el tanto en Borland como en Internet es paupérrima.

Existen muchos puntos que no se han tocado, como la nomenclatura de los parámetros de los encapsulados SELECT, INSERT, UPDATE y REFRESH. La sentencia REFRESH que se menciona aquí en este hilo está equivocada. Para empezar se debe agregar la cláusula WHERE al query ya que los refresh de Interbase solamente afectan a un registro (el activo) por lo que si no se agrega se pudre el buffer del IBDataset.

No se menciona nada del manejo de transacciones, de los campos afectados por GENERADORES (que es un tema bastante complejón), de los bufferchunks ni mencionan nada sobre el FetchAll.

Hace falta documentación decente sobre TIBDataset, porque lo que hay actualmente francamente es muy malo.

Responder Con Cita
  #13  
Antiguo 08-12-2005
Avatar de Paoti
Paoti Paoti is offline
Miembro
 
Registrado: may 2003
Ubicación: Monterrey. N.L., México
Posts: 612
Poder: 21
Paoti Va por buen camino
Manual de uso del IBDataset

¡Hola a todos!



¿Cómo están compañeros?


Equinoxe, comunidad en general. ¡Vamos haciendo ese articulo que hable acerca del funcionamiento del IBDateset!.



Yo Estoy dispuesto a colaborar con mis conocimientos, a la vez de que me serviría a mí y a todos ustedes.



Paoti está más que apuntado, esta al pie del cañón.



Les comento que hice una aplicación pequeño-mediana con el combo IBTable + IBUPdateSQL, porque desconocia del todo el funcionamiento del IBDataSet.




NaCl-U2
__________________
Estudia y anda en la calle.... que asi serás el doble de listo que los demás...

análisis de información
análisis y diseño de sistemas

Paoti Rios Reséndiz
Responder Con Cita
  #14  
Antiguo 05-07-2006
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Poder: 21
mlara Va por buen camino
Bueno, a estas alturas ya han de haber probado bastante con el TIBDataset. Bueno, yo estoy trabajando con el TMDODataset, así que es como lo mismo. Alguien me podría decir, si yo tengo una sentencia en la propiedad InsertSQL, de donde toma el componente el valor de los parámetros?

Quiero decir, si tengo los valores de los campos en componentes visuales, digamos TEdit, como hago para que el insert tome estos valores?
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.
Responder Con Cita
  #15  
Antiguo 06-07-2006
nemesio nemesio is offline
Miembro
 
Registrado: nov 2005
Ubicación: Isla de Margarita, Venezuela
Posts: 377
Poder: 19
nemesio Va por buen camino
Esto es válido para IBDataset, TQuery, no he probado con otros pero es en teoría lo mismo.
Query1.InsertSQL......
Query1.ParamByName('Nombre').Value:=Edit1.Text; //Asi le colocas el Valor a los parametros.
Query1.ExecSQL;
Responder Con Cita
  #16  
Antiguo 06-07-2006
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Poder: 21
mlara Va por buen camino
mmm.. pues precisamente no. Mejor así:

Código:
MDODataset1.InsertSQL.Text := ...;
MDODataset1.Insert; // o MDODataset.Append;
MDODataset1.FieldByName('NombreCampo').Value := Edit.Text;
...
MDODataset1.Post;
ParamByName o Params[i] no funciona cuando los parámetros son de la forma :Nombre_de_campo.

Están chéveres estos comp... siempre había usado los TQuery.
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.

Última edición por mlara fecha: 06-07-2006 a las 14:47:35.
Responder Con Cita
  #17  
Antiguo 06-07-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Siempre puedes editar el InsertSql para que quede con : prIdCliente, de esta forma ya no es un campo (porque el nombre no coincide), sino un parámetro.

Un parámetro siempre tienes que darselo, el valor de un campo, puede quedar vacío y guardar un null si no se rellena. Depende de cómo quieras hacerlo.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #18  
Antiguo 06-07-2006
nemesio nemesio is offline
Miembro
 
Registrado: nov 2005
Ubicación: Isla de Margarita, Venezuela
Posts: 377
Poder: 19
nemesio Va por buen camino
Yo he utilizado los parámetros con el mismo nombre de los campos y me han funcionado, el hecho está en que cuando usas los ":" haces la diferencia entre un campo y un parámetro.
mLara dice que es mejor la Inserción Manual usando Insert, bueno yo la he probado con inserción masiva y es mucho mas lenta que la inserción con SELECTSQL.
Responder Con Cita
  #19  
Antiguo 07-07-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por nemesio
Yo he utilizado los parámetros con el mismo nombre de los campos y me han funcionado, el hecho está en que cuando usas los ":" haces la diferencia entre un campo y un parámetro.
mLara dice que es mejor la Inserción Manual usando Insert, bueno yo la he probado con inserción masiva y es mucho mas lenta que la inserción con SELECTSQL.
No es cierto del todo, mira por ejemplo ":OLD_IDCLIENTE" el campo se llama IDCLIENTE, "OLD_" es un prefijo que significa el valor antiguo del campo, usado en actualizaciones y borrados. Lleva delante los dos puntos, y sin embargo, no es un parámetro, tampoco es un nombre de campo, es... "un valor especial"
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 07-07-2006 a las 11:02:37.
Responder Con Cita
  #20  
Antiguo 07-07-2006
Avatar de mlara
[mlara] mlara is offline
Miembro Premium
 
Registrado: jun 2003
Ubicación: Colombia
Posts: 667
Poder: 21
mlara Va por buen camino
Cita:
Empezado por nemesio
yo la he probado con inserción masiva y es mucho mas lenta que la inserción con SELECTSQL.
.

Interesante, para tener en cuenta.
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 20:19:38.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi