| Autor |
Beitrag |
haste
Hält's aus hier
Beiträge: 6
|
Verfasst: So 15.04.07 01:31
Hallo,
als Benutzer von Turbo Delphi Explorer 2006 und Firebird 1.5.4
möchte ich eine Anfrage (zwei eigentlich) erstellen, bei der überprüft wird, ob der Wert von TEdit.Text (CHAR()) innerhalb einer Spalte der DB vorhanden ist.
Die Tabelle sieht so aus:
[url= img120.imageshack.us...?image=form3qy6.jpg] [/URL]
Die Form sieht so aus:
[url= img120.imageshack.us...?image=form2mo2.jpg] [/URL]
Ich habe mit Hilfe von TSQLConnection erfolgreich mit der Datenbank eine Verbindung erstellt.
Später fand ich, dass mit Hilfe entweder TSQLQuery.FindFirst oder TSQLStoredProc.FindFirst die Suche nach einem Element in einer DB möglich ist.
Leider weiß ich nicht, wie TEdit.Caption innerhalb einer Anfrage integriert werden soll. Deswegen bitte ich um Anweisungen/Literaturangaben/Internetadressen/Beispiele/Hinweise!
Edit: Statt Caption, Text (Dank HelgeLange!)
Zuletzt bearbeitet von haste am So 15.04.07 02:41, insgesamt 1-mal bearbeitet
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: So 15.04.07 02:15
also erstmal hat TEdit keine Caption, sondern einen Text.
Schau doch mal auf die Firebird - Seite, da gibt es immer nette Dokumentationen zu SQL, das ist auch garnicht so schwer, da es ja eigentlich im SQL für Tabellen-Bearbeitung nur 4 Grundbefehle gibt : SELECT, INSERT, UPDATE, DELETE. Du suchst etwas über SELECT.
Das sollte dir weiterhelfen....
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
haste 
Hält's aus hier
Beiträge: 6
|
Verfasst: So 15.04.07 02:42
HelgeLange: Nach was genau soll ich in der Firebird Seite durchsuchen? Stored Procedure?
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: So 15.04.07 03:06
nein, nach Queries.
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
haste 
Hält's aus hier
Beiträge: 6
|
Verfasst: So 15.04.07 06:38
Ich probiere mit TSQLQuery die folgende Anweisung auszuführen:
SQL-Anweisung 1: 2:
| SELECT BNAME FROM BENUTZER WHERE BNAME = :TEdit1.Text; |
Bei der Probe die Anweisung zu aktivieren bekomme ich den folgenden Fehler:
No value for parameter 'TEdit1.Text'
Danach stelle ich von Params im 'Object Inspector' für 'TEdit1.Text' Eigenschaften wie :
DataType: ftString
ParamType: ptInput
ein, aber sehe bei Aktivierung von TSQLQuery die folgende Fehlermeldung:
'Missing query, table name or procedure name.'
Ich verstehe, dass BNAME = TEdit1.Text fehlerhaft ist, aber ich kenne keinen andern Weg meine Idee umzusetzen.
Wie soll ich BNAME = TEdit1.Text umschreiben?
Und bei der Kompilierung in dieser Prozedure
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.LoginBnClick(Sender: TObject); begin if (SQLQuery1 = BenNameTxt.Text) and (PasswortTxt.Text = 'haste') then begin Form1.Visible := false; Form2.Showmodal; end else MessageDlg('Fehlerhaftes Passwort/Benutzername',mtWarning,[mbok],0); end; |
kommt die folgende Fehlermeldung dazu:
[Pascal Error] Unit1.pas(76): E2010 Incompatible types: 'string' and 'TSQLQuery'
(Linie 76 ist 'if (SQLQuery1 = BenNameTxt.Text) and (PasswortTxt.Text = 'haste') then begin')
Deswegen möchte ich wissen, wie 'cast'-e ich TSQLQuery in String?
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: So 15.04.07 10:26
einen Query castet man gar nicht !
Du benutzt sicher eine Form und hast daruf ein Query-Objekt gezogen ?
Wo schreibst du den SQL-Befehl rein ? Im Objectinspektor oder per Quellcode ?
Objectinspektor kann ich nicht empfehlen, viel zu starr.
im source-code machste das in etwa so
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| query.sql.add(Format('SELECT BNAME FROM BENUTZER WHERE BNAME = ''%s''', [Edit1.text]); query.sql.add(Format('SELECT BNAME FROM BENUTZER WHERE UPPER(BNAME) = ''%s''', [Uppercase(Edit1.text)]); |
das Öffnen scheint dein 2tes Problem zu sein.
Du solltest dem Query der Einfachheit halber die Parameter für
Benutzername und Passwort fest zuordnen und die Abfrage vor dem
Öffnen des Query's machen. Den öffnest du dann nur,
wenn benutzername und passwort richtig sind
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
haste 
Hält's aus hier
Beiträge: 6
|
Verfasst: Mo 16.04.07 00:46
Danke für die bisherigen Antworten.
Und noch eine Frage. Ich habe probiert
SQL-Anweisung
einzugeben, aber es erscheint die folgende Fehlermeldung
'[Pascal Error] Unit1.pas(78 ): E2015 Operator not applicable to this operand type'
Wie könnte ich die obene Anfrage formulieren, um zu prüfen, ob SQLQuery1 etwas gefunden hat?
Änderung:
mit Hilfe von diesem
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:
| procedure TForm1.LoginBnClick(Sender: TObject); var SR: SQLResult; begin try SQLQuery1.SQL.Clear; SR:=SQLQuery1.sql.add(Format('SELECT BNAME FROM BENUTZER WHERE BNAME = ''%s''',[BenNameTxt.Text])); SQLQuery1.Open; if (SR <> Null) then if (PasswortTxt.Text = 'haste') then begin Form1.Visible := false; Form2.Showmodal; end else begin Form1.Close; Form2.Close; end finally SQLQuery1.Active := false; SQLQuery1.sql.clear; end end; |
Quelcode habe ich der vorherige Fehler ("Operator not applicable to this operand type") behoben, aber leider reagiert das Program nicht wie erwart.
Es sieht so aus, als ob das Program alle Werten von BenNameTxt.Text akzeptiert. Nicht nur die Werten, die sich innerhalb der Spalte BNAME, sondern alle.
Hat jemand eine Idee, warum es so etwas passiert? Hilft bitte einem Anfänger!
Änderung:
Mit
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure TForm1.LoginBnClick(Sender: TObject); begin try SQLQuery1.SQL.Clear; SQLQuery1.sql.add(Format('SELECT BNAME FROM BENUTZER WHERE BNAME = ''%s''',[BenNameTxt.Text])); SQLQuery1.Open; if ( Not (SQLQuery1.IsEmpty) and (PasswortTxt.Text = 'haste')) then begin Form1.Visible := false; Form2.Showmodal; end else begin Form1.Close; Form2.Close;
end finally SQLQuery1.Active := false; SQLQuery1.sql.clear; end end; |
schaffte ich, was ich wollte!
DANKE AN zuma UND HelgeLange FÜR DIE HILFE!
Jetzt kann ich ruhig schlaffen!
Zuletzt bearbeitet von haste am Do 19.04.07 01:25, insgesamt 1-mal bearbeitet
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Mi 18.04.07 20:04
Hallo,
kann dein problem nicht so ganz nachvollziehen ...
wenn du wissen willst, warum der erste Code nicht geht und der zweite doch:
liegt einzig daran, das die If (SR <> Null) nicht gegriffen hat
(ist immer true bei dir, es sei den, das zuweisen des SQL-befehl an den Query hat nicht geklappt)
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Mi 18.04.07 20:27
Hallo!
Für solche Art der Abfragen ist das Select Count(Spaltenname) from Tabelle where Bedingung da.
LG
Stefan
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
HelgeLange
      
Beiträge: 735
Erhaltene Danke: 6
Windows 7
Delphi7 - Delphi XE
|
Verfasst: Mi 18.04.07 22:12
wenn man wissen will, ob ein oder mehrere Ergebnisse zu einem Query zurückkamen, dann macht man das nicht mit sqlquery <> nil, sondern so :
Delphi-Quelltext 1: 2: 3: 4: 5:
| SQLQuery1.First; If Not SQLQuery1.Eof Then begin SQLQuery1.Fields[FieldNo].As(integer)(String)(Whatever); end; |
_________________ "Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
|
|
haste 
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 19.04.07 01:25
Verzeihung bitte!
Ich war so müde, dass ich nicht bemerkt habe, dass es in meiner Nachricht keine Korrektursmeldung gibt!
|
|
|