Avatar billede telep Nybegynder
04. maj 2004 - 16:08 Der er 27 kommentarer og
1 løsning

SQL indsætte ny record

Hejsa,

Jeg skal have indsat en nu record i en SQL database men det spiller ikke helt.

Jeg har forsøgt mig med følgende sql sætning:

        dataset->CommandText = "INSERT INTO tblKvalitetsskema VALUES (:tmpID, :ProjektID, :Aktiv, :navn)";

Men det kan jeg ikke få til at spille. Jeg ved positivt at der står intergers i de tre første variable og en string i den sidste. Den brokker sig over at der ikke må stå NULL i et felt...

Jeg tror måske ikke det er den rigtige måde at få variablerne ind i sql-sætningen på.

Jeg har også prøvet:

dataset->CommandText = "INSERT INTO tblKvalitetsskema VALUES (" + var1 + "," + var2 + "," osv...

men det virker heller ikke...

nogen der kan komme med nogle hints?
Avatar billede and_ Nybegynder
04. maj 2004 - 16:14 #1
nu er jeg godt nok ikke C mand, men mon ikke du skal definere sql'en rigtigt ;)

sql = "insert into moduler (modulnavn, subquest, switch) values ('" & navn & "','" & quest & "', 0)"
Avatar billede avlund Nybegynder
04. maj 2004 - 16:14 #2
Husk at der skal være apostroffer rundt om din string...
Avatar billede and_ Nybegynder
04. maj 2004 - 16:14 #3
du skal jo definere hvor de forskellige values skal hen :D
Avatar billede jpk Nybegynder
04. maj 2004 - 16:15 #4
char cmd[300];
sprintf(cmd, "INSERT INTO tblKvalitetsskema VALUES (%d, %d, %d, '%s'), tmpID, ProjektID, Aktiv, navn)");
Avatar billede avlund Nybegynder
04. maj 2004 - 16:18 #5
and: det er ikke nødvendigvis korrekt. Hvis man sætter værdierne ind i tabellens forventede rækkefølge, behøver man ikke at skrive felterne.
Avatar billede and_ Nybegynder
04. maj 2004 - 16:20 #6
;) hvad skal jeg sige... jeg er ikke C mand ;)

Men det var da et kvalificeret bud på evt. fejlfinding
Avatar billede avlund Nybegynder
04. maj 2004 - 16:21 #7
Det har intet med C at gøre, det er en del af SQL-syntaksen...
Avatar billede and_ Nybegynder
04. maj 2004 - 16:23 #8
Vil nu altid mene at det er bedre at definere alt, istedet for at satse på at maskinen selv finde ud af det ;)

men det er jo op til en selv, hvordan man vil kode...
Avatar billede jpk Nybegynder
04. maj 2004 - 16:26 #9
Bagefter skal du naturligvis gøre sådan:

dataset->CommandText = cmd;

og størrelsen af char arrayet skal også være stort nok til indeholde hele den formaterede streng, jeg har brugt 300, men et større array kan være nødvendigt...
Avatar billede telep Nybegynder
04. maj 2004 - 16:39 #10
jpk: der kommer sql-fejl:

---------------------------
Debugger Exception Notification
---------------------------
Project Teleperformance.exe raised exception class EOleException with message 'Line 1: Incorrect syntax near ',''. Process stopped. Use Step or Run to continue.
---------------------------
OK  Help 
---------------------------
Avatar billede telep Nybegynder
04. maj 2004 - 16:44 #11
Ser sådan ud nu:

        char cmd[300];
        sprintf(cmd, "INSERT INTO tblKvalitetsskema VALUES (%d, %d, %d, '%s'), (tmpID, ProjektID, Aktiv, navn)");
        dataset->CommandText = cmd;
Avatar billede jpk Nybegynder
04. maj 2004 - 16:49 #12
sprintf(cmd, "INSERT INTO tblKvalitetsskema VALUES (%d, %d, %d, '%s')", tmpID, ProjektID, Aktiv, navn);
Avatar billede telep Nybegynder
04. maj 2004 - 16:56 #13
Hvad gør jeg så for at fyre kommandoen af?

Ikke dataset->Open

det giver nemlig:
---------------------------
Debugger Exception Notification
---------------------------
Project Teleperformance.exe raised exception class EDatabaseError with message 'dataset: CommandText does not return a result set'. Process stopped. Use Step or Run to continue.
---------------------------
OK  Help 
---------------------------
Avatar billede jpk Nybegynder
04. maj 2004 - 16:57 #14
Du skal sikkert gøre noget lign.:
dataset->Execute
Avatar billede telep Nybegynder
04. maj 2004 - 17:01 #15
findes ikke...
Avatar billede jpk Nybegynder
04. maj 2004 - 17:02 #16
Hvilke metoder findes så på objektet..?
Avatar billede telep Nybegynder
04. maj 2004 - 17:03 #17
dataset->ExecuteOptions
dataset->ExecuteAction("TBasicAction * Action)
Avatar billede telep Nybegynder
04. maj 2004 - 17:06 #18
Og mange andre, men ingen som jeg lige kan se er det jeg skal bruge!
Avatar billede jpk Nybegynder
04. maj 2004 - 17:07 #19
Har du ikke et query objekt?
A la: query->ExecSQL
Avatar billede telep Nybegynder
04. maj 2004 - 17:14 #20
Det er et adoDataset jeg bruger
Avatar billede jpk Nybegynder
04. maj 2004 - 17:16 #21
Tjo, men det siger mig ikke så meget...
Bruger du Borland Builder eller hvad?
Avatar billede telep Nybegynder
04. maj 2004 - 17:22 #22
ja
Avatar billede jpk Nybegynder
04. maj 2004 - 17:30 #23
Jeg har ikke meget erfaring med Borland Builder, men disse indlæg bruger en funktion der hedder ExecSQL:
http://www.eksperten.dk/spm/468626
http://www.eksperten.dk/spm/265647
Avatar billede telep Nybegynder
04. maj 2004 - 17:55 #24
oki...

Jeg har lige et spørgsmål til det her : (%d, %d, %d, '%s')

hvad går det ud på og hvad skriver man hvis det nu var en double man ville have?
Avatar billede jpk Nybegynder
04. maj 2004 - 17:59 #25
%f

eller

%.2f hvis du kun vil have 2 decimaler
Avatar billede telep Nybegynder
04. maj 2004 - 18:10 #26
dvs at det her er okay?

                sprintf(sqlstr, "INSERT INTO tblSpoergsmaal VALUES (%d, %d, '%s', %f, %d, %d)", spmID, kvalID, Spoergsmaal.front().getSpoergsmaal(), Spoergsmaal.front().getVaegtning()), Spoergsmaal.front().getSpoergsmaalNr(), Spoergsmaal.front().getMaxVaerdi();
Avatar billede telep Nybegynder
04. maj 2004 - 18:12 #27
hvor kaldene i rækkefølge returnerer String, Double, int, int
Avatar billede jpk Nybegynder
04. maj 2004 - 18:46 #28
Det ser rigtig ud, men hvis du vil tjekke kan du prøve at debugge eller skrive teksten ud i en msg box
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