PDA

Ver la Versión Completa : Consulta sobre DataSet


ivantj24
26-02-2011, 05:48:47
Holas que tal, bueno tengo una pregunta sobre como coenctarme a una BD, yo lo que hago es utilizar los componentes ADO,
1- utilizo el ADOConection y utilizo la propiedad connectionString para generar la conexion.

Aqui mi duda
2-Despues utilizo un DataSet por medio de la propiedad CommandText busco la tabla con la cual me quiero conectar en mi caso uso la tabla Usuarios, en AddTable To SQL me aparecen todas la stablas que maneja mi BD y aqui solo uso la tabla de Usuarios como decia, y en la propiedad Active = True,

3-Utilizo un DataSource que se conecta al DataSet.

Hatas aqui todo bien, todo esta lo hago en la form principal, despues en una ventana fsOnStayTop pongo un TQuery con el cual hago el login, todo esto esta bien, y hago una tabla para dar de alta usuarios y todo bien, mi duda es...

...Cuando quiero usar otra tabla de las que tengo en mi BD, en el paso 2, en el DataSet ,en su propiedad CommandText, al darle AddTable To SQL, solo eligo Usuarios, acaso tengo que seleccionar todas las demas tablas, para que despues pueda usarlas conectandome a ese DataSet, o tengo que hace un DataSet por cada Tabla que use?

si llegara ha usar solo un DataSet para toda la Base de Datos tengo una duda, ahi donde selecciono la Tabla, me quedaria algo asi

from EstacionFolio select * from Usuario

Cada que elijo una tabla, me pone junto a todo lo demas, esto solo son 3 tablas de toda mi BD, cada que agrego una la pone junto, y esto de 2 from en una sentencia no va, por lo menos no creo, no se si es un DataSet por tabla, o como hago para usar todas mis tablas, una por una dependiendo la fsMDIChild que use, si alguien sabe de algun libro o algun tutorial que exista en el foro lo agradeceria, por que la conexion la hago basado en un video que mire, voy aprendiendo conforme avanzo en este proyecto por eso la pregunta de si usar un DataSet por cada tabla o que otras formas hay o cual recomiendan, de antemano gracias por la ayuda que brinden

Neftali
28-02-2011, 09:05:51
Una pregunta, ¿y no puedes cambiar esa propiedad "a mano"?

Es de tipo String, me imagino, porque no la rellenas en cada momento con lo que necesitas:


SELECT * FROM Usuario
SELECT * FROM Estacion
SELECT * FROM Empresas
....

ivantj24
28-02-2011, 21:57:10
si ya mire que si la puedo cambiar el detalle es que no se como al meter todas las sentencias dentro del DataSet con todos loso select al querer elegir cual utilizar como hacerlo.

y otra cosa en otro post me recomendaron mejor usar un DataModule, ya lo tengo comprendo el concepto, pero es la misma historia, tengo que usar un DataSet por cada Tabla? o como hacerlo

Neftali
01-03-2011, 12:12:34
si ya mire que si la puedo cambiar el detalle es que no se como al meter todas las sentencias dentro del DataSet con todos loso select al querer elegir cual utilizar como hacerlo.

No puedes "meterlas" todas a la vez (bueno, con ADO hay posbilidad de hacerlo, pero es bastante lioso); Creo que es más sencillo que en cada momento coloques la sentencia que quieres y actives el DataSet.

De todas formas, ya que lo he comentado, te pongo un ejemplo sencillo.

Con ADO puedes añadir un ADOQuery con la siguiente sentecia SQL:


Select Top 5 * from Usuario
Select Top 5 * from Moneda
Select Top 5 * from Pais


Al abrir la sentencia, ADO detecta que son tres sentecias diferentes y lanza las 3 devolviendo 3 recordsets.
Para acceser a ellos, puedes colocar 3 DBGrids y asociados a ellos 3 DataSources y con el siguiente código acceder a los 3:


var
n:Integer;
FRecordSet:TADODataSet;
begin
// Cargamos las 3 sentecias SQL y abrimos el Query
ADOQuery1.SQL.Text := Memo1.Lines.Text;
ADOQuery1.Open;
// Acceder a primer recordset
FRecordSet := TADODataSet.Create(nil);
FRecordSet.Recordset := ADOQuery1.Recordset;
// cambias la fuente de datos del DBGrid para mostrar USUARIOS
DBGrid1.DataSource.DataSet := FRecordSet;

// Segundo Dataset (Moneda)
FRecordSet := TADODataSet.Create(nil);
FRecordSet.Recordset := ADOQuery1.NextRecordSet(n);
// DBGrid2 mostrará las monedas
DBGrid2.DataSource.DataSet := FRecordSet;

// el tercer recordset son los paises
FRecordSet := TADODataSet.Create(nil);
FRecordSet.Recordset := ADOQuery1.NextRecordSet(n);
DBGrid3.DataSource.DataSet := FRecordSet;

ivantj24
02-03-2011, 18:34:00
Gracias por la respuesta neftali, comenzare a trabajar sobre eso, ahora mismo estoy atorado ahi, pero con esta ayuda espero implementarlo bien, gracias y si surge alguna duda espero me puedan ayudar, gracias de nuevo