Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Hilfe bei Acces Abfrage (https://www.delphipraxis.net/172025-hilfe-bei-acces-abfrage.html)

ereetzer 8. Dez 2012 19:08

Datenbank: Access • Version: 2003 • Zugriff über: ADO

Hilfe bei Acces Abfrage
 
Hallo, vorweg ich habe überhaupt gar keine Ahnung von sql geschweige sql in Access.

Folgende Situation:
In einer Tabelle werde Pfade zu Dokumenten gespeichert.
Ich ermittle nun in einem Fenster ob diese Dokumente noch unter diesem Pfad zu finden sind. Wenn nein, liste ich den betreffenden Dokumentenpfad. bzw. den Datensatz auf
in einer Listbox.

Es gibt eine "Haupt"Tabelle: Dokument. Diese ist mit der Tabelle verbunden wor die Pfade gespeichert werden und zwar mit der ID der Haupttabelle.

Ich mag nun ermitteln welche Einträge der Haupttabelle das Dokument enthalten wo der Pfad nicht mehr existiert.(es kann sein, das der Dokumentenpfad mehren Einträgen der Haupttabelle zugeordnet ist)

So nach dem Motto: select * from Haupttabelle where Haupttabelle.id = Dokumentenpfadtabelle.nummer and Dokumentenpfadtabelle.Pfad = ListBoxEintrag. Aber so geht es nicht (Sinngemäß natürlich)

Mag mir wer helfen?

Das die Abfrage die nicht geht:
DM.ADOQuery2.SQL.Add('select * from Dokument where Dokument.ID = Bilder.Nummer AND Bilder.Bild = ' + listboxFilesNotFound.Items[listboxFilesNotFound.ItemIndex]);

Fehlermeldung: Ein parameteobjekt ist nicht ordnungsgemäß definiert. Inkonsistente oder unvollständige Informationen wurden angegeben.

Jumpy 8. Dez 2012 21:04

AW: Hilfe bei Acces Abfrage
 
Du must eine per Join eine Datenmenge nehmen, die beide Tabellen enthält. Du kannst dich ja nicht auf Felder der Tabelle Bilder beziehen, wenn du in diese Tabelle gar nicht "reinschaust". In SQL könnte das z.B so aussehen:

select * from Dokument, Bilder where ...

Bummi 8. Dez 2012 21:11

AW: Hilfe bei Acces Abfrage
 
Der Parameterfehler kommt da der Pfad ":" enthält, welches wenn ParamCheck nicht abgeschaltet wird zur Generierung der Parameter herangezogen wird.

Delphi-Quellcode:
// Besser
AdoDataset1.CommandText :=' Select * from Hauptabelle where ID in (Select Nummer from DokumentenpfadTabelle where Pfad=:Pfad)';

AdoDataset1.Parameters.ParamByName('Pfad').Value := ListboxEintrag;

// Notfalls
AdoDataset1.ParamCheck := False;
AdoDataset1.CommandText :=' Select * from Hauptabelle where ID in (Select Nummer from DokumentenpfadTabelle where Pfad=' +  QuotedStr('ListboxEintrag') + ')';

ereetzer 8. Dez 2012 21:50

AW: Hilfe bei Acces Abfrage
 
Zitat:

Zitat von Bummi (Beitrag 1194801)
Der Parameterfehler kommt da der Pfad ":" enthält, welches wenn ParamCheck nicht abgeschaltet wird zur Generierung der Parameter herangezogen wird.

Delphi-Quellcode:
// Besser
AdoDataset1.CommandText :=' Select * from Hauptabelle where ID in (Select Nummer from DokumentenpfadTabelle where Pfad=:Pfad)';

AdoDataset1.Parameters.ParamByName('Pfad').Value := ListboxEintrag;

// Notfalls
AdoDataset1.ParamCheck := False;
AdoDataset1.CommandText :=' Select * from Hauptabelle where ID in (Select Nummer from DokumentenpfadTabelle where Pfad=' +  QuotedStr('ListboxEintrag') + ')';

ich danke Euch beiden.

@Jumpy: das hatte ich mittlerweile auch. hat den Nachteil, das die Datenzeile beide Tabellen als Inhalt hat. Aber hat mir wieder was gegeben (stichwort: reinschauen)
Die "besser" Lösung von Bummi passt genau so, wie ich es wollte, von daher: DANKE!

So recht checke ich das aber noch nicht mit den Parametern. Naja, im Prinzip schon, aber trotzdem, da muss ich nochmal was zum lesen finden. Das mag ich jetzt wissen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz