Gottesgeschenk Geschrieben 16. Juni 2003 Geschrieben 16. Juni 2003 hallo leute bin mir nicht sicher ob ich hier richtig bin, aber ich hab ne frage zu c- und SQL-abfragen ich hab die folgende query in meinem programm: "SELECT ARANUMMER, AEL.ARBEN,AELLAGER.MLBESTAND FROM AEL,AELLAGER WHERE AEL.ARANUMMER=10025 AND AEL.ARIDNR=AELLAGER.MLIDNR" wie kann ich der sql abfrage eine variable übergeben (z.b. artikelnummer aus einer externen datei ) nummer1=xxxxx "SELECT ARANUMMER, AEL.ARBEN,AELLAGER.MLBESTAND FROM AEL,AELLAGER WHERE AEL.ARANUMMER=xxxxx AND AEL.ARIDNR=AELLAGER.MLIDNR" hoffentlich ist die frage nicht zu dämlich gestellt :confused: Zitieren
Guybrush Threepwood Geschrieben 16. Juni 2003 Geschrieben 16. Juni 2003 Hi, indem du entweder den String Stückweise zusammenbaust und an ensprechender Stelle die Variablen anfügst oder mit sprintf;) Bsp1.: char szTabelle[] = "Tabelle"; char szSql[100]; char szNummer[] = "12345"; strcpy(szSql,"SELECT * FROM "); strcat(szSql,szTabelle); strcat(szSql," WHERE id = '"); strcat(szSql,szNummer); strcat(szSql,"'"); [/PHP] Bsp2.: [PHP] char szTabelle[] = "Tabelle"; char szSql[100]; char szNummer[] = "12345"; sprintf(szSql,"SELECT * FROM %s WHERE id = '%s'",szTabelle,szNummer); Gruß Guybrush Zitieren
Gottesgeschenk Geschrieben 16. Juni 2003 Autor Geschrieben 16. Juni 2003 das sieht bei mir folgendermaßen aus: const char* pszQuery = "SELECT ARANUMMER, AEL.ARBEN,AELLAGER.MLBESTAND FROM AEL,AELLAGER WHERE AEL.ARANUMMER=10025 AND AEL.ARIDNR=AELLAGER.MLIDNR"; wie muss ich das da einbinden? Zitieren
Guybrush Threepwood Geschrieben 16. Juni 2003 Geschrieben 16. Juni 2003 const char* pszQuery = "SELECT ARANUMMER, AEL.ARBEN,AELLAGER.MLBESTAND FROM AEL,AELLAGER WHERE AEL.ARANUMMER=10025 AND AEL.ARIDNR=AELLAGER.MLIDNR"; Das geht ja schonmal gar nicht;) Du weißt dort einem uninitialisiertem Pointer einen String zu. Das heißt du Schreibst an eine zufällige Stelle im Speicher deinen String. Entweder legst du ein Array an das groß genug ist, oder du stellst vorher fest wie groß dein String wird und legst ein entsprechendes Array an. Danach mußt einfach (so wie ich es oben beschreiben habe) den String zusammen bauen. sprintf arbeitet wie printf, nur das der String nicht ausgegeben wird, sondern in die Variable, die als erster Parameter übergeben wird, kopiert wird. Zitieren
Klotzkopp Geschrieben 16. Juni 2003 Geschrieben 16. Juni 2003 Original geschrieben von Guybrush Threepwood Das geht ja schonmal gar nicht;) Du weißt dort einem uninitialisiertem Pointer einen String zu. Das heißt du Schreibst an eine zufällige Stelle im Speicher deinen String. Doch, das ist in Ordnung. Stringliterale kann man ohne Probleme einem const char* zuweisen. Man darf nur auf keinen Fall schreibend auf diesen String zugreifen. Man kann sogar einem char* (also ohne const) ein Stringliteral zuweisen. Das hat aber nur historische Gründe, man sollte es also nicht machen. Zitieren
Guybrush Threepwood Geschrieben 16. Juni 2003 Geschrieben 16. Juni 2003 Original geschrieben von Klotzkopp Doch, das ist in Ordnung. Stringliterale kann man ohne Probleme einem const char* zuweisen. Man darf nur auf keinen Fall schreibend auf diesen String zugreifen. Man kann sogar einem char* (also ohne const) ein Stringliteral zuweisen. Das hat aber nur historische Gründe, man sollte es also nicht machen. :beagolisc Aha, das hätte ich jetzt nicht gedacht. Und wie sieht das dann mit der Freigabe aus? Muss ich das selber machen oder passiert das automatisch? Zitieren
Gottesgeschenk Geschrieben 16. Juni 2003 Autor Geschrieben 16. Juni 2003 Original geschrieben von Klotzkopp Doch, das ist in Ordnung. Stringliterale kann man ohne Probleme einem const char* zuweisen. Man darf nur auf keinen Fall schreibend auf diesen String zugreifen. Man kann sogar einem char* (also ohne const) ein Stringliteral zuweisen. Das hat aber nur historische Gründe, man sollte es also nicht machen. kannst du mir einen tip geben, wie ich eine variable einfügen kann? Zitieren
Klotzkopp Geschrieben 16. Juni 2003 Geschrieben 16. Juni 2003 Original geschrieben von Guybrush Threepwood Und wie sieht das dann mit der Freigabe aus? Muss ich das selber machen oder passiert das automatisch? Das passiert automatisch. Der Speicher für Stringliterale wird schon zur Compilezeit berücksichtigt. Original geschrieben von Gottesgeschenk kannst du mir einen tip geben, wie ich eine variable einfügen kann? Guybrush Threepwood hat dir zwei Beispiele gegeben, die beide ihren Zweck erfüllen. Wenn C++ in Frage kommt, kannst du auch std::stringstream verwenden. Je nach verwendeter Entwicklungsumgebungen kann es noch weitere Lösungen geben, z.B. CString::Format bei MFC. Du hast praktisch die freie Auswahl . Zitieren
ITSE Geschrieben 17. Juni 2003 Geschrieben 17. Juni 2003 wenn ich das richtig verstanden habe ist dann der String im Stack gespeichert? Oder wird automatisch Speicher vom Heap angefordert und wieder freigegeben? Zitieren
Gottesgeschenk Geschrieben 18. Juni 2003 Autor Geschrieben 18. Juni 2003 ich hab das ganze jetzt so eingebaut - und es funktioniert! danke nochmal an alle die mir geholfen haben! nicht schön, aber meins: char szSql[200] = " "; char szNummer1[] = "10000";//Artikelnummer IME ********* wenn abfrage eines bestimmten bereiches benötigt wird: von 10000 bis 10800 char szNummer2[] = "10800";//Artikelnummer IME sprintf(szSql,"SELECT ARANUMMER, AEL.ARBEN,AELLAGER.MLBESTAND FROM AEL,AELLAGER WHERE AEL.ARANUMMER BETWEEN %s AND %s AND AEL.ARIDNR=AELLAGER.MLIDNR",szNummer1,szNummer2); ********* sprintf(szSql,"SELECT ARANUMMER, AEL.ARBEN,AELLAGER.MLBESTAND FROM AEL,AELLAGER WHERE AEL.ARANUMMER=%s AND AEL.ARIDNR=AELLAGER.MLIDNR",szNummer1); const char* pszQuery = szSql; Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.