Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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:

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

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?

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.

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

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?

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

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

Oder wird automatisch Speicher vom Heap angefordert und wieder freigegeben?

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;

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.