Entwickler-Ecke

Datenbanken - Query mit dbExpress mit nur max. 6 Feldern


Schumi - Fr 01.04.05 08:20
Titel: Query mit dbExpress mit nur max. 6 Feldern
Hallo zusammen,

benutze dbExpress, um auf eine Oracle Datenbank zuzugreifen (mit den CoreLab-Treibern der Zusatz-CDs von Delphi 7).
Dies funktioniert mit der Kompo TSQLQuery auch wunderbar. Aber nur solange die Anzahl der zurückgelieferten Felder eines SELECT-Queries die Anzahl 6 nicht übersteigt.
Ist dies der Fall, gibt Delphi eine Fehlermeldung "dbExpress: Das Feld XYZ wurde nicht gefunden!".

Hat jemand eine Idee?

Vielen Dank!


webbi - Fr 01.04.05 10:33

Ich benutzte Selber die CoreLab-Komponenten, Allerdings mit MS-SQL...

Hatte aber auch bei 154 Feldern noch keine Probleme...

Poste doch mal den Query...


jasocul - Fr 01.04.05 10:43

Hast du das schon mal mit einer anderen Tabelle oder dem "*" im Select probiert?
Vielleicht hast du dich auch wirklich nur vertippt und das Feld heißt gar nicht "XYZ"?


Schumi - Fr 01.04.05 10:45

Hier einmal der Code, den ich verwende:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
procedure TfrmHardware.DruckerdatenLaden(dname: string);
var SQLText,hilfe  : string;
begin
  with frmMain.sqlqryOracle do
    begin
      Close;
      SQLText:='select DRUCKER_SN,DRUCKER_STPSN,DRUCKER_NAME,DRUCKER_DINASNAME,'+
               'DRUCKER_STANDORTID,DRUCKER_ANSCHLUSSID,DRUCKER_TYPID,DRUCKER_IPADRESSE'+
               ' from DRUCKER where DRUCKER_STPSN=:sn';

      SQL.Text:=SQLText;
      ParamByName('sn').AsString:=copy(dname,1,4);

      // ... und raus damit
      Active:=true;

      First;
      // Ergebnis in ListBox füllen
      while not eof do
        begin
          edtName.Text:=FieldByName('DRUCKER_NAME').AsString;
          mskedtSTPSN.Text:=FieldByName('DRUCKER_STPSN').AsString;
          edtSN.Text:=FieldByName('DRUCKER_SN').AsString;
          edtDINAS.Text:=FieldByName('DRUCKER_DINASNAME').AsString;
          hilfe:=FieldByName('DRUCKER_IPADRESSE').AsString;
          cmbxStandort.ItemIndex:=FieldByName('DRUCKER_STANDORTID').AsInteger-1;
          cmbxAnschluss.ItemIndex:=FieldByName('DRUCKER_ANSCHLUSSID').AsInteger-1;
          cmbxDruckertyp.ItemIndex:=FieldByName('DRUCKER_TYPID').AsInteger-1;
          Next;
        end;

      Active:=false;
    end;
end;


Wenn ich das ganze mit "Select * from ..." mache, ändert sich auch nichts!

Moderiert von user profile iconUGrohne: Code- durch Delphi-Tags ersetzt.


LCS - Fr 01.04.05 10:50

Hi
schau doch mal nach ob für die Query vielleicht noch persistente Felder angelegt sind, die jetzt nicht mehr stimmen. (Rechte Maustaste auf die Query und Feldereditor) Falls ja, löschen oder anpassen.

Gruss Lothar


jasocul - Fr 01.04.05 10:53

Vermutlich bekommst du den Fehler in der Zuweisungsschleife. Oder doch schon beim Active:=True?
Kommentier die Zeile, bei der es passiert doch mal aus. Bekommst du dann den Fehler beim nächsten Feld auch?


Schumi - Fr 01.04.05 11:01

@jasocul: Der Fehler passiert in der Zuweisungsschleife und auch bei auskommentierter Zeile (dann halt das nächste Feld)

@LCS : Persistente Felder gibts leider auch keine

Habe auch bei anderen Projekten (und auch anderen Oracle-Datenbanken) diesen Fehler. Bei CoreLab und dem M$-SQL-Server hatte ich nie Probleme!


webbi - Fr 01.04.05 11:46

Ich würde mal testen, ob es an CoreLab liegt...

Gibt es für Oracle nicht auch einen QueryAnalyzer? - Würde da einfach mal den Query testen...

Hier noch ein paar andere Oracle-Komponenten: http://www.torry.net/quicksearchd.php?String=oracle&Title=Yes


Schumi - Mo 04.04.05 10:28

So, Problem gelöst.
Habe eine neue Version der CoreLab-Treiber geladen. Das geht jetzt ab wie ein Zäpfchen :D

Trotzdem vielen Dank für Eure Hilfe!