Avatar billede cyrus2k Nybegynder
27. oktober 2001 - 12:13 Der er 18 kommentarer og
1 løsning

Variabel i DELETE...????

OK jeg er ret Newbie - agtig til det her men jeg spørger alligevel :
Hvordan får jeg en variabel med i min SQL sætning :
( fra et c++ prg.. )
..
char *tmpbuf = \"noget\";
query=\"DELETE FROM tabel WHERE column =\'\"tmpbuf\"\'\";
...
Hvorfor virker dette ikke...
Avatar billede terry Ekspert
27. oktober 2001 - 12:17 #1
Well its years since I played around with C++ but try

query=\"DELETE FROM tabel WHERE column = \" ++ tmpbuf
Avatar billede terry Ekspert
27. oktober 2001 - 12:17 #2
or
query=\"DELETE FROM tabel WHERE column = \'\" ++ tmpbuf ++ \"\'\"
Avatar billede morten_s Nybegynder
27. oktober 2001 - 12:18 #3
Havde det været Delphi skulle du have brugt Params

På følgende måde:

  Query1.SQL.Text := \'DELETE FROM Tabel WHERE ID = :Id\';
  Query1.Prepare;
  Query1.Params.ParamByName(\'ID\').AsInteger := 3;
  Query1.ExecSQL;
Avatar billede cyrus2k Nybegynder
27. oktober 2001 - 12:27 #4
hmmm... Får følgende fejlmeddelse :
\"ISO C++ forbids cast to non-reference type used as lvalue\".....

By the way : Jeg programmerer i Linux... med g++
Avatar billede morten_s Nybegynder
27. oktober 2001 - 12:31 #5
Cyrus2k> Ja det er sku\' en kende for langhåret til mig ;-))

men jeg tror nu alligevel du skal se på mit eks, SQL, skal
jo være klar over at der kommer en parametre og hvad den hedder

WHERE colum = :tmpbuf

derefter refere du til tmpbuf umidelbart efter med den parametre der skal overføres
Avatar billede terry Ekspert
27. oktober 2001 - 16:56 #6
The ANSI SQL is as follows

For numeric columns:
\"DELETE FROM table WHERE columnName = 12\"
For text columns:
\"DELETE FROM table WHERE columnName = \'noget\'\"

How you do this in C/C++ is up to you.
what database are you using?

Avatar billede cyrus2k Nybegynder
28. oktober 2001 - 15:31 #7
Jeg bruger MiniSQL...

Har prøvet :

char *tmpbuf;
query = \"DELETE FROM table WHERE column =\'\"tmpbuf\"\'\";
Still doesn\'t work.... :o((
Avatar billede terry Ekspert
28. oktober 2001 - 17:11 #8
cyrus2k I think you are missing the point!

Try this:
query = \"DELETE FROM table WHERE column =\'A known column\'\"

Replace a known column to a vlue you know exists in the database.


When you write \"DELETE FROM table WHERE column =\'\"tmpbuf\"\' what happnes is th evalue of
query gets set to

\"DELETE FROM table WHERE column = \'tmpbuf\'\"

but what are trying to do is get it to look like this

\"DELETE FROM table WHERE column =\'noget\'\"

In VB it would look like this

Dim tmpbuf as string

tmpbuf = \"noget\"

query = \"DELETE FROM table WHERE column =\'\" & tmpbuf & \"\'\"

You can see that tmpbuf is NOT inside the string and this means that the VALUE of tmpbug (noget) get concatonated to the string and not the word \"tmpbuf\" which I think is happening in your case.

Cant you debug your program to see what the contents of query is?
Avatar billede cyrus2k Nybegynder
29. oktober 2001 - 16:28 #9
Okay. lad mig lige se, jeg skal altså skrive noget med :
...
char *query;
string tmpbuf;
tmpbuf = \"noget\";
query = \"DELETE... =\'\" & tmpbuf &\"\'\";
....
- Hvilket ikke virker ! :
330: no match for `const char[37] & string &\'
:o((
Avatar billede cyrus2k Nybegynder
29. oktober 2001 - 16:29 #10
Og så glemte jeg vist at sige at jeg er sku glad for hjælpen guys! Hope you come up with a sollution :o)
Avatar billede terry Ekspert
29. oktober 2001 - 19:18 #11
cyrus2k hav eyou tried what I said in my last comment?

cyrus2k I think you are missing the point!

Try this:
query = \"DELETE FROM table WHERE column =\'A known column\'\"

Replace a known column to a value you know exists in the database.

If this works then this means that a NORMAL SQL statement does work, and all you need to do is find out how you get the value of tmpbuf into query.


Avatar billede terry Ekspert
29. oktober 2001 - 19:18 #12
query = \"DELETE... =\'\" & tmpbuf &\"\'\";
IS NOT going to work, this is an example from VB
Avatar billede cyrus2k Nybegynder
29. oktober 2001 - 19:28 #13
Yes yes.. Jeg har prøvet med \"DELETE...=\'noget\'\";
Og det virker fint...

Prøver med en løkke, der lægger tmpbuf over i
query - strengen. noget med :

....
char tmpbuf[] = \"noget\";
char *query;
query =\"DELETE FROM notfound WHERE s_word =\";
int tmpbufL = sizeof(tmpbuf);
int i = 0;
int o = 36;
while(i<tmpbufL)
{
query[o] += tmpbuf[i];
o++;
i++;
}
....
hmmm... virker ikke helt ? help please :o(..
Avatar billede cyrus2k Nybegynder
29. oktober 2001 - 19:28 #14
Sætter point op !! :o)
Avatar billede terry Ekspert
29. oktober 2001 - 19:44 #15
So we know that a NORMAL SQL works ikke?

It is YEARS since I used C/C++ but I remeber that there is a function in C called strcat. Take a look at this

Something like

char *query = \"=\"DELETE FROM notfound WHERE s_word =\";
char *tmpbuf = \"noget\"

query = Strcat(query, tmpbuf)

If \"noget\" is a string then it must \"\'noget\'\"
If its a number then \"123\"






Avatar billede terry Ekspert
29. oktober 2001 - 19:47 #16
cyrus2k> Isnt this actually a C/C++ question?

When you say you are a newbe is this with SQL or C++ ?
Avatar billede cyrus2k Nybegynder
29. oktober 2001 - 19:55 #17
hmmm. i starten var det SQL, men jeg kan se at det er blevet et c++ spg.. Sætter det op der.. Takker Mange gange for hjælpen terry>du får point !!
Avatar billede terry Ekspert
29. oktober 2001 - 19:56 #18
Is it working?
Avatar billede cyrus2k Nybegynder
30. oktober 2001 - 09:38 #19
JEP! now its working... Thanks again!!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester