Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi suchen eines bestimmten wertes in interbase datenbank (https://www.delphipraxis.net/4607-suchen-eines-bestimmten-wertes-interbase-datenbank.html)

Grumble 6. Mai 2003 10:59


suchen eines bestimmten wertes in interbase datenbank
 
hallo leute,

ich hab da ein problem den wert des primary keys in einer datentabelle zu finden. ich suche den wert der ID fuer ein bestimmtes feld in dem der name = einem suchstring ist.
ich hab dazu bisher folgendes

Delphi-Quellcode:
procedure TOpenProj.ExecIBSQL(ASQL: String;var Pid:integer);
begin
  with FDB.SQL_PROJEKT do try
    if not FDB.TR_FARce.InTransaction then FDB.TR_FARce.StartTransaction
    else if Open then Close;
    SQL.Clear;
    SQL.Add(ASQL);
    ExecQuery;

    Transaction.Commit;
  except
    Transaction.Rollback;
  end;
  Pid:= ??????
end;
ich rufe die procedure mit
Delphi-Quellcode:
 ExecIBSQL(vSQL,gpid);
auf
der uebergebene sql string setzt sich zusammen aus
Delphi-Quellcode:
vSQL := 'SELECT ID FROM PROJEKT WHERE NAME=:'+listboxprojects.Items.Strings[ListBoxProjects.ItemIndex];
mein prob ist das ich nicht weiss wie ich nach dem execquery die gesuchte ID in die variable Pid schreiben kann.
koennt ihr mir da vielleicht n tip geben??

gruesse
Grumble
:coder:

Jens Schumann 6. Mai 2003 11:20

Hallo,
eine kleine Verständnisfrage vorweg:
Was soll der Doppelpunkt in "... NAME=:'+..." bewirken. So werden eigentlich Parameter in einem SQL-Statment eingeleitet.
Eigentlich müsste Deine Abfrage immer eine leere Menge liefern.

Jetzt die Antwort:

PID:=IBSQL.FieldByName(ID).AsInteger;

Damit das klappt bzw. eindeutig ist, darf Deine Abfrage garantiert nur einen Datensatz liefern. Wenn die Abfrage mehr als einen Datensatz liefert, musst Du Dich für einen entscheiden.

Über Resultsets mit mehreren Datesätzen kannst Du wie folgt iterieren
Delphi-Quellcode:
While Not IBSQL1.EOF do
  begin
  // Hier irgendetwas machen
  IBSQL1.Next;
  end;

Grumble 6. Mai 2003 11:28

hallo jens,

danke fuer die antwort ich werd das = mal ausprobieren, dass mehrere gleiche namen auftauchen hab ich beim hinzufuegen von datensaetzen schon ausgeschlossen.

zum : in '...name=:' ich habe leider keine ahnung wie solche sql statements aussehen muessen, ich hab das mir mehr oder weniger aus der eigenschaft sql in der tibsql komponente zusammengereimt
du meinst also der : muss weg? ich probiers :)

gruesse
Grumble
:coder:

Jens Schumann 6. Mai 2003 11:30

Zitat:

Zitat von Grumble
du meinst also der : muss weg?

Ja das meine ich.

Ach ja bei PID:=IBSQL.FieldByName('ID').AsInteger;
habe ich oben die ' vergessen

Grumble 6. Mai 2003 11:35

ich habs probiert, leider funzt beides nicht
mit : bekomm ich eine 0 zurueck obwohl ich weiss des es eine 7 sein muss,
ohne : bekomm ich eine exception , die besagt, dass der ueberwiesene string nicht als column in der tabelle steht

mach ich vielleicht generell was falsch bei der abfrage?

gruesse
Grumble
:coder:

Jens Schumann 6. Mai 2003 11:38

Hallo,
wenn das Feld Name vom Type Char oder VarChar usw. ist, dann
muss der SQL so lauten:
SELECT ID FROM PROJEKT WHERE NAME="'+listboxprojects.Items.Strings[ListBoxProjects.ItemIndex]+'"';

Grumble 6. Mai 2003 11:45

hallo,

habs probiert, ich bekomm immer noch die 0 raus, :(
das feld name ist varchar

Grumble
:coder:

Grumble 6. Mai 2003 11:50

hallo, :oops:
sorry es klappt doch, ich hab da was mit den vielen ''''''' verhaun :)

vielen dank!

gruesse
Grumble
:coder:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:45 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