query funktion
-
hallo, bin auf der verzweifelten suche nach einer bestimmten funktion der TQuery Komponente:
Ich habe eine Tabelle mit zwei Spalten ,spalte1=string und spalte2=id, ich möchte durch das finden eines datensatzes der spalte1 auf den dazugehörigen wert des datensatzes der spalte 2 zugreifen, also angenommen wir haben eine tabelle name und telefonnummer, anhand vom namen den ich in der tabelle finde, möchte ich die zugehörige telefonnummer , danke im voraus, gibt es da eine spezielle methode der query komponente oder muss ich das mit einer sql abfrage machena
-
TQuery ist ja gerade für SQL-Abfragen gedacht, also nimm das auch. So schwer ist das doch gar nicht.
-
void __fastcall TForm1::Button5Click(TObject *Sender) { if(Table2->RecordCount !=0) { Table2->FindKey(ARRAYOFCONST((Query2->SQL->Add("SELECT MID FROM AUSGEHENDE_EMAILS WHERE MSUBJECT="[DBText5->Caption]" "))); Table2->Delete(); Query2->Close(); Query2->Open(); } else ShowMessage("Keine Mails mehr vorhanden"); }das ist mein ansatz funktioniert aber nicht und komm irgendwie nicht weiter
-
Probier mal z.B. folgendes:
SELECT Name, Telefonnummer FROM Tabelle_Name, Tabelle_Telefonnummer WHERE Tabelle_Name.ID = Tabelle_Telefonnummer.ID AND Name LIKE '" + suche + "'; SELECT Name, Telefonnummer FROM Tabelle_Name, Tabelle_Telefonnummer WHERE Tabelle_Name.ID = Tabelle_Telefonnummer.ID AND Telefonnummer LIKE '" + suche + "';
-
ich hab jetzt als sql abfrage folgendes:
("SELECT MID FROM AUSGEHENDE_EMAILS WHERE MSUBJECT = '"DBText5->Caption"' ")
Nur dieses DBText5->Caption (Element in Borland C++Builder) wird nicht erkannt, und somit fällt die Abfrage flach, tu ich das falsch machen mit den anführungszeichen und so, oder wie muss ich das machen, danke im voraus an alle tipps
-
eventuell gehts ja besser wenn du den Inhalt von DBText5 in die SQl-Abfrage einfügst und das geht bei Strings im allgemeinen eher so:
("SELECT MID FROM AUSGEHENDE_EMAILS WHERE MSUBJECT = '"+DBText5->Caption+"' ")falls du einen bestimmten Datenbankeintrag löschen willst geht auch:
Query2->SQL->Add("DELETE FROM AUSGEHENDE_EMAILS WHERE MSUBJECT='"+[DBText5->Caption]+"'"); Query2->ExecSQL();oder
Query2->SQL->Add("DELETE FROM AUSGEHENDE_EMAILS WHERE MSUBJECT=:subject"); Query2->ParamByName("subject")->AsString= DBText5->Caption; Query2->ExecSQL();
-
Das Problem ist das ich es nicht mit select machen soll,
also nochmal ich habe eine tabelle mit zwei spalten, einmal artikelname und artikelnr:
wenn ich DBText5 markiere was dem artikelnamen entspricht, soll durch eine funktion anhand des artikelnamens, die zugehörige artikelnr gefunden werden und gelöscht werden, es soll also unbedingt über die artikelnr geschehen, da manche artikel gleiche namen haben aber andere nummern also hier mein code:
if(Table2->RecordCount !=0) { Table2->FindKey(ARRAYOFCONST((DBText5->Caption))); Table2->Delete(); Query2->Close(); Query2->Open(); }Das ist aber ein suchverfahren das auf einen index basiert, gibt es keine andere möglichkeit das über die table komponente zu machen, das er sich zum beispiel durch die spalte artikelname die ich markiert habe, in der selben zeile in die nächste spalte also in artikelnummer springt und da löscht, bitte bitte bitte
-
du könntest auch die Methode Locate verwenden, siehe BCB-Hilfe zu TBDEDataSet::Locate, außerdem gabs zu Locate auch letztens hier einen Beitrag
c++-starter schrieb:
Das Problem ist das ich es nicht mit select machen soll, ...
DELETE ist kein SELECT
-
ich meine mit sql
-
Mit Locate geht das etwa so
Variant locvalues; int Bounds[2]; Bounds[0] = 0; Bounds[1] = 2; locvalues = VarArrayCreate(Bounds,1, varVariant); locvalues.PutElement(Variant("Key1"),0); locvalues.PutElement(Variant("Key2"),1); TLocateOptions tlo; try { bool locres = Query1->Locate( KeyFieldNames, locvalues, tlo ); return locres; } catch(EDBEngineError& e) { return false; } catch(...) { return false; }Die Anzahl und Art der Keys musst du natürlich anpassen. Die Reihenfolge ist spaltenweise.
-
ja danke danke habs jetzt!!!!!!

-
Darf ich fragen, wieso Du kein SQL verwenden darfst?
Datenbanken ohne SQL ist, meiner Meinung nach, genau so sinnvoll, wie ein kastrierter Zuchtbulle.