sqldb

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
drunblut
Beiträge: 12
Registriert: Di 8. Dez 2009, 09:09

sqldb

Beitrag von drunblut »

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?

Christian
Lazarusforum e. V.
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

Beitrag von Christian »

Wäre schön wenn du dein problem erstmal ordentlich beschreibst
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

drunblut
Beiträge: 12
Registriert: Di 8. Dez 2009, 09:09

Re: sqldb

Beitrag von drunblut »

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.

Benutzeravatar
theo
Beiträge: 8516
Registriert: Mo 11. Sep 2006, 19:01

Re: sqldb

Beitrag von theo »

Deine Beschreibung ist sehr knapp.
Was ist eigentlich deine Muttersprache?

Vielleicht hast du in den DBGrid Columns noch Fieldnames drin?

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: sqldb

Beitrag von hde »

theo hat geschrieben:Vielleicht hast du in den DBGrid Columns noch Fieldnames drin?


Es kann nur sein dass im DBGrid oder einem DBEdit Fieldnames definiert sind die in der aktuellen Abfrage / Select nicht vorkommen

Christian
Lazarusforum e. V.
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

Beitrag von Christian »

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.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

drunblut
Beiträge: 12
Registriert: Di 8. Dez 2009, 09:09

Re: sqldb

Beitrag von drunblut »

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.

drunblut
Beiträge: 12
Registriert: Di 8. Dez 2009, 09:09

Re: sqldb

Beitrag von drunblut »

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.

mse
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

Beitrag von mse »

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.

gocher
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

Beitrag von gocher »

  1. Wieso nimmst Du das Feld PATNR nicht mit in den SELECT auf, Du brauchst den Wert doch nachher sowieso zum Aufruf des Datensatzes.
  2. 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

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: sqldb

Beitrag von hde »

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.

drunblut
Beiträge: 12
Registriert: Di 8. Dez 2009, 09:09

Re: sqldb

Beitrag von drunblut »

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.

Benutzeravatar
theo
Beiträge: 8516
Registriert: Mo 11. Sep 2006, 19:01

Re: sqldb

Beitrag von theo »

Könntest du einfach mal die alte Frage beantworten, ob in DBGrid.Columns noch Fieldnames defniert sind?

hde
Beiträge: 556
Registriert: Mi 11. Aug 2010, 02:56

Re: sqldb

Beitrag von hde »

drunblut hat geschrieben:Ich dachte, dass sqlquery.close und sqlquery.sql.clear die vorherige select-anweisung löschen

Ja, aber wenn du Fieldnames z.B. ins DBGrid übernommen oder dort definiert hast dann muss dein Selct diese auch liefern.
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.

drunblut
Beiträge: 12
Registriert: Di 8. Dez 2009, 09:09

Re: sqldb

Beitrag von drunblut »

im objektinspektor steht bei dbgrid columns 0 items. Es läuft keine andere query. bin ziemlich ratlos.

Antworten