Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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:

Geschrieben

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

Geschrieben
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.

Geschrieben
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.
Geschrieben
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?

Geschrieben
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?

Geschrieben
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 ;).

Geschrieben

wenn ich das richtig verstanden habe ist dann der String im Stack gespeichert?

Oder wird automatisch Speicher vom Heap angefordert und wieder freigegeben?

Geschrieben

ich hab das ganze jetzt so eingebaut - und es funktioniert!

danke nochmal an alle die mir geholfen haben! :D

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;

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...