sqldb
sqldb
Hallo,
in meinem Datenbankprojekt ist ein neues Problem aufgetaucht (Windows 7, 64bit, laz fpc 2.6.2, firebird 2.5). Ich kann mir problemlos den Inhalt einer Tabelle über
sqlquery1.sql.text:='select * from Stammdaten';
in einem dbgrid anzeigen lassen. Will ich dann aber nur die Werte von 1 oder 2 Spalten anzeigen lassen über
sqlquery1.sql.text:='select Name,vorname from Stammdaten';
meckert das Programm immer, dass es eine andere Spalte in der Tabelle nicht findet. Hat einer eine Idee?
in meinem Datenbankprojekt ist ein neues Problem aufgetaucht (Windows 7, 64bit, laz fpc 2.6.2, firebird 2.5). Ich kann mir problemlos den Inhalt einer Tabelle über
sqlquery1.sql.text:='select * from Stammdaten';
in einem dbgrid anzeigen lassen. Will ich dann aber nur die Werte von 1 oder 2 Spalten anzeigen lassen über
sqlquery1.sql.text:='select Name,vorname from Stammdaten';
meckert das Programm immer, dass es eine andere Spalte in der Tabelle nicht findet. Hat einer eine Idee?
Re: sqldb
Hallo Christian, sorry, mußte gestern kurzfristig abbrechhen. Ich bin noch neu. Deshalb weiß ich noch nicht so genau, worauf es ankommt. Eigentlich denke ich, dass es kein großes Problem sein sollte. Aber ich komme einfach nicht weiter. In der Tabelle sind Stammdaten von Patienten gespeichert. Über eine select Abfrage sollen damn in einem dbgrid nur die Inhalte von einigen ausgewählten Feldern wiedergegeben werden, damit man damn einen Patienten auswählen kann. Alle Felder anzeigen it's kein Problem, aber bei der Auswahl will das Programming immer ein nicht ausgewähltes Feld finden und gibt eine Fehlermeldung zurück. Falls das nicht reicht bin ich Dir dankbar, wenn Du mir einen Tip gist, was Du noch an Infos brauchst.
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: sqldb
Das wichtigste ist erstmal was für Datenbankzugriffkomponenten verwendest du.
Evntl auch n Codeschnipsel wo das problem auftritt.
Was ist die Fehlermeldung? "Das programm meckert" ist etwas schwach.
Evntl auch n Codeschnipsel wo das problem auftritt.
Was ist die Fehlermeldung? "Das programm meckert" ist etwas schwach.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
Re: sqldb
ich benutze ibconnection, sqltransaction, sqlquery und datasource. Alle Einstellungen sind m.E. richtig. Ansonsten funktioniert ja alles.
datamodule2.sqlquery1.close;
datamodule2.sqlquery1.sql.clear;
datamodule2.sqlquery1.sql.text:='select name from stammdaten';
datamodule2.sqlquery1.open;
Der Fehler entsteht in der letzten Zeile. Wenn sqlquery1 wieder geöffnet werden soll, bekomme ich die Fehlermeldung Exception sqlquery1: field not found: PATNR (das ist das primary key feld). Wenn ich nach dem Schlüsselfeld selecte, bekomme ich die Meldung, dass das Feld Name nicht gefunden wird.
datamodule2.sqlquery1.close;
datamodule2.sqlquery1.sql.clear;
datamodule2.sqlquery1.sql.text:='select name from stammdaten';
datamodule2.sqlquery1.open;
Der Fehler entsteht in der letzten Zeile. Wenn sqlquery1 wieder geöffnet werden soll, bekomme ich die Fehlermeldung Exception sqlquery1: field not found: PATNR (das ist das primary key feld). Wenn ich nach dem Schlüsselfeld selecte, bekomme ich die Meldung, dass das Feld Name nicht gefunden wird.
Re: sqldb
Außerdem taucht dann im Editor in der Units Leiste DBCtrls auf mit
procedure TFieldDataLink.ActiveChanged;
begin
if FFieldName <> '' then
begin
UpdateField; Diese Zeile ist grau unterlegt
EditingChanged;
Reset;
end;
if Assigned(FOnActiveChange) then
FOnActiveChange(Self);
end;
Damit weiß ich aber nichts anzufangen.
procedure TFieldDataLink.ActiveChanged;
begin
if FFieldName <> '' then
begin
UpdateField; Diese Zeile ist grau unterlegt
EditingChanged;
Reset;
end;
if Assigned(FOnActiveChange) then
FOnActiveChange(Self);
end;
Damit weiß ich aber nichts anzufangen.
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: sqldb
Versuche herauszufinden welche Komponente nach PATNR verlangt. Vermutlich das dbgrid. Falls du systematisch vorgehen möchtest, schau zu welcher Komponente der datalink, welcher die exception auslöst, gehört. fcontrol.fname könnte die gewünschte Information liefern.
-
- Beiträge: 298
- Registriert: Di 23. Nov 2010, 23:41
- OS, Lazarus, FPC: Ubuntu/Win, Lazarus trunk, FPC trunk
- CPU-Target: 32Bit/64Bit
- Wohnort: Geldern
- Kontaktdaten:
Re: sqldb
- Wieso nimmst Du das Feld PATNR nicht mit in den SELECT auf, Du brauchst den Wert doch nachher sowieso zum Aufruf des Datensatzes.
- Kann es sein das Du den ersten (selektierten) Datensatz direkt anzeigst, wenn ja auch über datamodule2.sqlquery1, das geht nämlich nicht.
MfG Gocher
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
akt. Projekt: Webserver(HTTPS HTTP/2) mit integrierten CMS in Free Pascal - www.gocher.me
Re: sqldb
Es gibt doch nur eine schlüssige Erklärung die theo schon genannt hat:
Im DBGrid oder in der Query (oder einem DBEdit) hat er nach dem ersten versuchten Select mit * alle Feldnamen übernommen und dann gehen einzelne Selects nicht mehr.
Im DBGrid oder in der Query (oder einem DBEdit) hat er nach dem ersten versuchten Select mit * alle Feldnamen übernommen und dann gehen einzelne Selects nicht mehr.
Re: sqldb
Habe ich da was grundsätzlich falsch verstanden? Ich dachte, dass sqlquery.close und sqlquery.sql.clear die vorherige select-anweisung löschen und deshalb dann eine neue select-anweisung mit anderen Kriterien ausgeführt werden kann.
Re: sqldb
Ja, aber wenn du Fieldnames z.B. ins DBGrid übernommen oder dort definiert hast dann muss dein Selct diese auch liefern.drunblut hat geschrieben:Ich dachte, dass sqlquery.close und sqlquery.sql.clear die vorherige select-anweisung löschen
Und genau das besagt die Fehlermeldung: Es sind irgendwo Fieldnames verlangt die der Select nicht liefert.
Deshalb funktioniert der select mit * (der liefert alles) und die selects mit einzelnen Fieldnames eben nicht.
Aber darauf hat dich theo schon gestern Mittag hingewiesen.