Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   uso del IBDataSet (https://www.clubdelphi.com/foros/showthread.php?t=2490)

Giniromero 25-07-2003 11:09:20

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

__cadetill 25-07-2003 15:49:15

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

Giniromero 25-07-2003 16:12:14

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

__cadetill 25-07-2003 16:16:10

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

Delfino 27-07-2003 14:12:45

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..

__cadetill 27-07-2003 16:35:44

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

Delfino 27-07-2003 20:02:46

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

__cadetill 27-07-2003 20:22:25

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 ;)

hgiacobone 01-08-2003 16:30:18

Disculpen...
y digo yo, ¿Esto es igual para utilizarlo con un TADODataSet?

__cadetill 01-08-2003 17:30:26

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

__cadetill 01-08-2003 17:39:47

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

Equinoxe 08-12-2005 15:34:37

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.

:mad:

Paoti 08-12-2005 17:26:00

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

mlara 05-07-2006 21:44:05

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?

nemesio 06-07-2006 00:23:21

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;

mlara 06-07-2006 14:41:23

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.

Lepe 06-07-2006 16:56:30

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

nemesio 06-07-2006 21:11:46

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.

Lepe 07-07-2006 11:00:18

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"

mlara 07-07-2006 20:55:45

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.


La franja horaria es GMT +2. Ahora son las 19:27:46.

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