Avatar billede telep Nybegynder
17. april 2004 - 14:12 Der er 18 kommentarer og
1 løsning

SQL: Select Statement

Hej,

Jeg skal lave et select statement hvor jeg jeg vil have alle dem hvor feltet navn er lig med en variabel i mit program:

        Query1->SQL->Add("SELECT FirmaID FROM tblFirma WHERE Navn = ");
        Query1->SQL->Add(navn.c_str());

Det virker ikke, det kommer runtime error hvor den fortæller mig, at værdien af navn ikke er et felt i databasen.
Avatar billede htm Nybegynder
17. april 2004 - 14:34 #1
Dette skulle kunne gøre det:
Query1->SQL->Add("SELECT FirmaID FROM tblFirma WHERE Navn='" + navn + "'");

Men det kommer an på hvilken datatype navn er... Her går jeg udfra at navn er en AnsiString.
Avatar billede telep Nybegynder
17. april 2004 - 14:44 #2
med din sætning siger den:

[C++ Error] frmDTA.cpp(39): E2034 Cannot convert 'string' to 'AnsiString'

Hvis jeg tilføjer .c_str() efter navn så det ser sådan her ud:

Query1->SQL->Add("SELECT FirmaID FROM tblFirma WHERE Navn='" + navn + "'");

siger den:
[C++ Error] frmDTA.cpp(39): E2085 Invalid pointer addition
Avatar billede telep Nybegynder
17. april 2004 - 14:44 #3
Query1->SQL->Add("SELECT FirmaID FROM tblFirma WHERE Navn='" + navn.c_str() + "'");
Avatar billede arne_v Ekspert
17. april 2004 - 14:55 #4
Prøv:

string sqlstr = "SELECT FirmaID FROM tblFirma WHERE Navn='" + navn + "'";
Query1->SQL->Add(sqlstr.c_str());
Avatar billede telep Nybegynder
17. april 2004 - 15:14 #5
Jeg løste den med denne her lille fidus:

        AnsiString fNavn = navn.c_str();
Avatar billede telep Nybegynder
17. april 2004 - 15:16 #6
Men nu har jeg et andet problem:

når nu jeg gerne vil have dem hvor firmaID = id (integer)

altså:
        Query1->SQL->Add("SELECT Navn FROM tblProjekt WHERE FirmaID ='" + FirmaID + "'");
Avatar billede telep Nybegynder
17. april 2004 - 15:16 #7
det virker ikke...

og
        Query1->SQL->Add("SELECT Navn FROM tblProjekt WHERE FirmaID =" + FirmaID);

virker heller ikke...
Avatar billede telep Nybegynder
17. april 2004 - 15:28 #8
anyone?
Avatar billede htm Nybegynder
17. april 2004 - 15:58 #9
Det skal virke på din sidste måde, afhængig af hvad datatype FirmaID er... ;o)

Hvilken datatype er FirmaID og hvilken fejl får du?
Avatar billede telep Nybegynder
17. april 2004 - 16:00 #10
---------------------------
Debugger Exception Notification
---------------------------
Project Teleperformance.exe raised exception class EDBEngineError with message 'General SQL error.
[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near the keyword 'FROM'.'. Process stopped. Use Step or Run to continue.
---------------------------
OK  Help 
---------------------------
Avatar billede telep Nybegynder
17. april 2004 - 16:01 #11
FirmaID er int i tabellen og int i applikationen
Avatar billede htm Nybegynder
17. april 2004 - 16:03 #12
Hmm er ikke så stærk i at convertere mellem datatyper, SQL->Add() forventer et argument som skal være ansistring.

Prøv:
Query1->SQL->Add("SELECT Navn FROM tblProjekt WHERE FirmaID =" + (AnsiString)FirmaID);
Avatar billede telep Nybegynder
17. april 2004 - 16:07 #13
hmm...

sikker på det?

Der er jo ikke syntax fejl i c++ koden, men i SQL statementet!

[SQL Server]Incorrect syntax near the keyword 'FROM'.'.
Avatar billede htm Nybegynder
17. april 2004 - 16:11 #14
Ret sikker på du ikke bare kan blande AnsiString og Int...

Men du kan jo prøve og skrive det i en variabel og skrive indholdet ud i eks. et editfelt.

AnsiString sql;
sql = "SELECT Navn FROM tblProjekt WHERE FirmaID =" + (AnsiString)FirmaID);
Edit1->Text = sql;

Query->SQL->Add(sql);

For at forstå hvorfor der er syntaksdejl i en SQL sætning er der brug for at vide hvordan den helt præcist ser ud :o)
Avatar billede arne_v Ekspert
17. april 2004 - 16:13 #15
Prøv:

char sqlstr[200];
sprintf(sqlstr,"SELECT Navn FROM tblProjekt WHERE FirmaID = %d", FirmaID);
Query1->SQL->Add(sqlstr);
Avatar billede arne_v Ekspert
24. april 2004 - 17:42 #16
Har du prøvet det sidste ?
Avatar billede telep Nybegynder
24. april 2004 - 23:06 #17
jep det fungere... sorry jeg ikke har lukket...

Tak
Avatar billede telep Nybegynder
24. april 2004 - 23:07 #18
arne_v: lægger du et svar?
Avatar billede arne_v Ekspert
24. april 2004 - 23:18 #19
OK
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
Kurser inden for grundlæggende programmering

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