mysql SELECT-Anweisung
-
Die SQL Anweisung funktioniert mit dem id='"+UserID+"' nicht ...
-
Noch ein Versuch: Was funktioniert nicht?
Hellsehen ist so eine Gabe, die einem Programmierer nicht gegeben ist

-
Hallo
sollte da der "AnsiString Fehlerteufel" wal wieder zugeschlagen haben

Mfg
Klaus
-
Ich versuch mich auch mal als Hellseher:
UserID ist eine Zahl, z.B. int
Lösung dieses Problems: IntToStrmfg *glaskugebesitzer*
xXx
-
Möchte für meine Frage keinen extra Thread eröffnen, daher einfach mal in diesem.
Ich hab mit der Suchfunktion schonmal rausgefunden, wie ich Sachen mit dbExpress in die Datenbank schreiben kann.
Das Auslesen funktioniert nur sehr "müsam" ...Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("SELECT * FROM userdaten WHERE nick='"+UserID+"'");
Nickname = Query1->Fields->Fields[1]->AsString;
Query1->ExecSQL();Hab schon mehrere Sachen ausprobiert FieldByName etc.
Allerdings kommt immer die Meldung, dass es dieses Field nicht gibt.
Wie kann ich dem Programm denn sagen, das ich mit Fields[1] die Spalte "nick" meine?
-
Du hast auch
Das erste Feld hat den Index 0, das zweite 1 usw.
Mit Fields werden die Eigenschaften einer Feldkomponente einem anderen Feld in der Liste zugewiesen.
berücksichtigt. Dann sei noch auf
Die Methode FindField gibt ein angegebenes Feld zurück.
TField* __fastcall FindField(const AnsiString FieldName);
Beschreibung
Mit FindField können Sie feststellen, ob im TFields-Objekt eine bestimmte Feldkomponente referenziert wird. FieldName ist der Name des gesuchten Feldes. Wenn die Methode ein Feld mit dem angegebenen Namen findet, gibt sie die TField-Komponente für dieses Feld zurück, andernfalls NULL.
hingewiesen
-
Kann mir dazu vielleicht jemand ein kleines Beispiel geben?!
-
Wozu?
-
Damit ich die Spalte "nick" ausgeben kann.
Irgendwie will das nicht klappen
Bekomm die Fehlermeldung "Cannot perform this operation on a closed dataset"
-
Da liegt das Problem doch weniger am Namen, als an der Verbindung?
-
if (Query1->Active==true) Query1->Close(); Query1->SQL->Clear(); Query1->SQL->Add("SELECT nick,.... FROM userdaten WHERE nick= '"+UserID+"'"); //UserID ist String sonst geht das nicht ohne Datenkonvertierung //Wenn Du die Spalten kennst, die Du abfragen möchtest, dann verzichte auf den Joker Query1->Open(); // Datenmenge muß vor Zuweisung in Variabelen etc. geöffnet werden !! // ExecSQL kann bei Select weggelassen werden asNickname=Query1->FieldValues["nick"]; // geht bei bekannten SpaltenVielleicht hilft das.
-
Bin wohl irgendwie zu blöd ...
Query2->Close();
Query2->SQL->Clear();
Query2->SQL->Add("SELECT nick FROM userdaten WHERE id='1'");
Query2->Open();
String Nickname = Query2->FieldValues["nick"];"Query2: Cannot perform this operation on a closed dataset"
Das einfügen funktioniert, also eine Verbindung zur Datenbank besteht.
-
Edit:
nun klappt es doch ...
Vielen Dank
-
Hab dann noch ein kleines Problem O.o
Login_Check->Close(); Login_Check->SQL->Clear(); Login_Check->SQL->Add("SELECT * FROM userdaten WHERE nick='"+add_nick->Text+"' AND pass='"+add_pass->Text+"'"); Login_Check->Open(); String UserID = Login_Check->FieldValues["id"]; Form1->Caption = UserID;Wenn das falsche PW oder der falsche Nick eingetragen wird, dann ist Login_Check... NULL und das kann nicht als String deklariert werden ... Bekomm immer die Meldung:
"Could not convert variant of type (Null) into type (String)"
-
Du könntest ja darauf testen.
Variant var = Login_Check->FieldValues["id"]; String UserID = var.IsNull() ? "" : var;
-
"Two operands must evaluate to the same type"
-
Die Idee ist aber gut

Ich werd mal nen bisschen weiter testen.
-
Hallo
wie waere es mit ainem Test der Rueckgabe
(Tip -> RecordC....)Mfg
Klaus
-
Braunstein schrieb:
Du könntest ja darauf testen.
Variant var = Login_Check->FieldValues["id"]; String UserID = var.IsNull() ? "" : var;"Two operands must evaluate to the same type"
Variant var = Login_Check->FieldValues["id"]; String UserID = var.IsNull() ? String("") : String(var);Oder so ähnlich... Problem ist jedenfalls, das der Rückgabewert in beiden fällen identisch sein muss.
(Tip -> RecordC....) finde ich persönlich aber auch schöner

mfg
xXx
-
Ich stimme da in beiden Fällen zu. Casten nach AnsiString oder Umwandeln von operator ? nach if würden das Zuweisungsproblem lösen. Anwendung von RecordC... ist aber besser.