Usando múltiples consultas SQL

He hecho algunas búsquedas y no puedo encontrar una respuesta definitiva a esta.

Solo me estoy metiendo en SQL así que sea gentil. Usando D5, TNTUnicode, Zeos y SQLite3

Tengo un DBGrid con todos los nombres de Cuenta en las counts tbl que se muestran. Tengo un DBGrid con todas las carpetas en tblFolders mostrando.

En el OnCellClick de la grilla de Cuentas tengo una consulta SQL

qryFolders.Close; qryFolders.SQL.Clear; // Not really needed as I am assigning the Text next - but :) qryFolders.SQL.Text:= 'SELECT Folder FROM tblFolders WHERE UPPER(Account)="FIRSTTRADER"' qryFolders.ExecSQL; tblFolders.Refresh; 

En mi aplicación, no pasa nada, todavía tengo la list completa de Carpetas visible.

En el escritorio SQL-Expert, esa línea funciona bien y muestra solo las dos Carpetas asociadas con esa Cuenta. En esa aplicación, sigue mostrando la list completa de Carpetas

Si paso por OnCellClick, se muestra el text correcto, etc.

¿Dónde estoy equivocado?

Gracias

    Si desea mostrar un Detalle maestro (Cuenta como Maestro, Carpeta como Detalle), entonces comenzamos desde aquí:

     // connecting the grids AccountsDataSource.DataSet := tblAccounts; AccountsGrid.DataSource := AccountsDataSource; FoldersDataSource := tblFolders; FoldersGrid.DataSource := FoldersDataSource; // retrieving the data tblAccounts.Open; tblFolders.Open; 

    Eso debería reflejar, lo que ya tienes. Ahora vamos al Master-Detail.

    Debería ser obvio que todos los componentes de Query y Table tienen un set de connection válido, así que lo omitiré.

    Primero, asegúrese de que la consulta no esté activa

     qryFolders.Active := False; 

    Tener un Master-Detail con una consulta como detalle, tenemos que configurar el MasterSource

     qryFolders.MasterSource := AccountsDataSource; 

    y después de eso podemos configurar la consulta con parameters para vincular a los campos de MasterSource. Enlazando al campo La Account en MasterSource se hace usando :Account

     qryFolders.SQL.Text := 'SELECT Folders FROM tblFolders WHERE UPPER( Account ) = :Account'; 

    Ahora, estamos listos para recuperar los datos

     qryFolders.Open; 

    Hasta este momento, no veremos ningún cambio en el FoldersGrid , porque no le hemos dicho a nadie que lo haga. Ahora, hagamos que esto funcione

     FoldersDataSource.DataSet := qryFolders; 

    En su enfoque, no Open la consulta y no vinculó la consulta a la cuadrícula.


    Otra opción es tener un Master-Detail sin una consulta separada. (Parece que hubo alguna refactorización de código, así que supongo que esta es una muestra de trabajo)

     tblFolders.MasterSource := AccountsDataSource; tblFolders.MasterFields := 'Account'; tblFolders.LinkedFields := 'Account'; 

    Referencia:

    • SourceForge ZTestMasterDetail.pas (consulte la línea 181ff)
    • SourceForge ZDataset.pas