Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Como asignar un Dataset a un Datasource por Codigo (https://www.clubdelphi.com/foros/showthread.php?t=98008)

river_1 09-03-2026 08:05:26

Como asignar un Dataset a un Datasource por Codigo
 
Buenas noches , estoy tratando de cambiar el Dataset por medio de codigo a un Datasource para que los datos que se muestren sean de una consulta.
Ese Datasource esta conectado a una tabla pero deseo que se ejecute una consulta y que se muestre esa consulta en el Grid y poder regresar despues a la tabla.
recuerdo haberlo hecho pero entre tantos programas y codigo me sera imposible encontrarlo.
Asi es como lo estoy haciendo por codigo:
Código:

DataSource2.DataSet:=QryFiltro
Donde Qryfiltro es un componente ADOquery.
Estuve investigando como y literal dice que solo le asigne a la propiedad Dataset el nuevo componente por asi decirlo
Asi dice Google
Código:

DataSource1.Enabled := False; // Recomendado: desactivar antes de cambiar
DataSource1.DataSet := MiTablaQuery;
DataSource1.Enabled := True;

Al ejecutar me marca error que no coinciden los tipo de datos.
BD Acces.
Delphi 7.

duilioisola 09-03-2026 08:16:27

En tu caso lo que creo que debes hacer es cambiar el DataSource del Grid.
El DataSource creo que está unido a muchas eventos del DataSet para ir modificando todas las dependencias.

Código:

DBGrid <---> DataSource1 <---> DataSet1
            DataSource2 <---> DataSet2
                       
DBGrid <-X-> DataSource1 <---> DataSet1
        |
        +--> DataSource2 <---> DaSet2


river_1 09-03-2026 21:13:43

Gracias por tu pronta respuesta.
De hecho asi lo tenia en el codigo que no encuentro y se me hizo mas facil hacerlo en el Datasource pero veo que no es tan facil.
Te comento uso un Grid de unos componentes llamados Developert Express.
Este grid tiene una propiedad que se llama Datacontroller alli se asigna el Datasource pero en modo grafico.
Por codigo lo tengo asi:
Código:

cxGridDBTableView1.DataController.DataSource:=QryFiltro;
Pero me marca error incompatibles types Tdatasource and TADOquery desde el compilado.

Tambien lo pongo asi igual:
Código:

cxGridDBTableView1.DataController.DataSource:=QryFiltro.DataSource;
aqui me manda error en tiempo de ejecucion que no coninciden los tipos de datos.

Neftali [Germán.Estévez] 10-03-2026 08:15:33

Cita:

Empezado por river_1 (Mensaje 572046)
Por codigo lo tengo asi:
Código:

cxGridDBTableView1.DataController.DataSource:=QryFiltro;

Prueba con esto:

Código:

cxGridDBTableView1.DataController.DataSource.Dataset := QryFiltro;

duilioisola 10-03-2026 08:23:39

En el primero estás asignando un DataSet a un DataSource. Son cosas distintas y no funciona.
En el segundo estás asignando el DataSource de Query al DataSource del Grid... eso son dos DataSources distintos.

Debes pensar que el DataSource de un componente es por donde entra el dato.
  • En el caso de un DBEdit es por donde entra el valor de un campo
  • En el caso de un DBGrid es por donde entra una lista de registros a mostrar.
  • En el caso de un DataSet es por donde entran valores de campos para rellenar parámetros en el SELECT.

Por lo tanto la estructura debería ser

Código Delphi [-]
DSFiltro : TDataSource;

// El DataSource mostrará los datos que contenga el DataSet QryFiltro
DSFiltro.DataSet := QryFiltro;

// El dataset no necesita DataSource a menos que sea un maestro/detalle
QryFiltro.DataSource := null

// El DBEdit recibe los datos de DSFiltro. En concreo el campo "CAMPO1"
DBEdit.DataSource := DSFiltro;
DBEdit.FieldName := 'CAMPO1';

// El DBGrid recibe los datos de DSFiltro.
DBGrid.DataSource := DSFiltro;

Código:

DataSet_Cabecera --> DataSource --+---> DBGrid
                                  |
                                  +---> DBEdit
                                  |
                                  +---> DataSet_Detalle



La franja horaria es GMT +2. Ahora son las 06:41:23.

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