FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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á :) |
#2
|
|||
|
|||
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'; 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. |
#3
|
|||
|
|||
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á :) |
#4
|
|||
|
|||
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 |
#5
|
|||
|
|||
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..
|
#6
|
|||
|
|||
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)'); 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. |
#7
|
|||
|
|||
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 |
#8
|
|||
|
|||
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 |
#9
|
||||
|
||||
Disculpen...
y digo yo, ¿Esto es igual para utilizarlo con un TADODataSet?
__________________
Gracias de antemano por vuestra ayuda. ·.:*:.·Yako·.:*:.· |
#10
|
|||
|
|||
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
|
#11
|
|||
|
|||
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 |
#12
|
|||
|
|||
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. |
#13
|
||||
|
||||
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 |
#14
|
||||
|
||||
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. |
#15
|
|||
|
|||
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; |
#16
|
||||
|
||||
mmm.. pues precisamente no. Mejor así:
Código:
MDODataset1.InsertSQL.Text := ...; MDODataset1.Insert; // o MDODataset.Append; MDODataset1.FieldByName('NombreCampo').Value := Edit.Text; ... MDODataset1.Post; 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. |
#17
|
||||
|
||||
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. |
#18
|
|||
|
|||
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. |
#19
|
||||
|
||||
Cita:
__________________
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. |
#20
|
||||
|
||||
Cita:
Interesante, para tener en cuenta.
__________________
...y mañana caminaré por las calles pasando inadvertido, como siempre. |
|
|
|