AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi suchen eines bestimmten wertes in interbase datenbank
Thema durchsuchen
Ansicht
Themen-Optionen

suchen eines bestimmten wertes in interbase datenbank

Ein Thema von Grumble · begonnen am 6. Mai 2003 · letzter Beitrag vom 6. Mai 2003
Antwort Antwort
Benutzerbild von Grumble
Grumble

Registriert seit: 19. Mär 2003
Ort: Dresden
203 Beiträge
 
Delphi 6 Enterprise
 
#1

suchen eines bestimmten wertes in interbase datenbank

  Alt 6. Mai 2003, 10:59
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  ExecIBSQL(vSQL,gpid); auf
der uebergebene sql string setzt sich zusammen aus 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
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#2
  Alt 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;
  Mit Zitat antworten Zitat
Benutzerbild von Grumble
Grumble

Registriert seit: 19. Mär 2003
Ort: Dresden
203 Beiträge
 
Delphi 6 Enterprise
 
#3
  Alt 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
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#4
  Alt 6. Mai 2003, 11:30
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
  Mit Zitat antworten Zitat
Benutzerbild von Grumble
Grumble

Registriert seit: 19. Mär 2003
Ort: Dresden
203 Beiträge
 
Delphi 6 Enterprise
 
#5
  Alt 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
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#6
  Alt 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]+'"';
  Mit Zitat antworten Zitat
Benutzerbild von Grumble
Grumble

Registriert seit: 19. Mär 2003
Ort: Dresden
203 Beiträge
 
Delphi 6 Enterprise
 
#7
  Alt 6. Mai 2003, 11:45
hallo,

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

Grumble
  Mit Zitat antworten Zitat
Benutzerbild von Grumble
Grumble

Registriert seit: 19. Mär 2003
Ort: Dresden
203 Beiträge
 
Delphi 6 Enterprise
 
#8
  Alt 6. Mai 2003, 11:50
hallo,
sorry es klappt doch, ich hab da was mit den vielen ''''''' verhaun

vielen dank!

gruesse
Grumble
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:46 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