Published by wig on st Sep, 2008 in vraag-me-af with No Comments
Ik las onlangs een commentaar van Benoit Minisini waarin hij (vertaald) zegt:
Doe nooit:
sql = "INSERT INTO klant (naam) VALUES ('" & TextBox1.Text & "')"
res = mDatabase.conn.Exec(sql)
maar doe:
res = mDatabase.conn.Exec("INSERT INTO klant (naam) VALUES (&1)", TextBox1.Text)
Voorbeeld met een nieuw project, graphical application met: DB access.
Table test bevat velden:
- naam: varchar30
- opm: varchar20
- tijd: timestamp
' Gambas class file
PRIVATE sMaxRecs AS String
PRIVATE resQuery AS Result
PRIVATE $hConTest AS NEW Connection
PUBLIC SUB _new()
END
PUBLIC SUB Form_Open()
WITH $hConTest
.Type = "mysql"
.Host = "localhost"
.Login = "app"
.Password = "test"
.Name = "testtable"
END WITH
TRY $hConTest.Close
TRY $hConTest.Open
IF isTestConnect()
btInsert1.Enabled = TRUE
btInsert2.Enabled = TRUE
btInsert3.Enabled = TRUE
ENDIF
END
PUBLIC SUB isTestConnect() AS Boolean
IF $hConTest THEN
RETURN $hConTest.Opened
ELSE
RETURN FALSE
ENDIF
END
PUBLIC SUB btInsert1_Click()
DIM sSql AS String
sSql = "INSERT INTO test (naam) VALUES ('" & TextBox1.Text & "')"
DEBUG sSql
resQuery = $hConTest.Exec(sSql)
DEBUG resQuery.Available
END
PUBLIC SUB btInsert2_Click()
resQuery = $hConTest.Exec("INSERT INTO test (naam) VALUES (&1)", TextBox2.Text)
END
PUBLIC SUB btInsert3_Click()
DIM sSql AS String
sSql = "INSERT INTO test (naam) VALUES (&1)"
resQuery = $hConTest.Exec(sSql, TextBox2.Text)
END |
|
FMain
Run
De code onder knop 1 geeft volgende foutmelding:
De code onder knop 2 werkt (is gemaakt volgens opmerking boven).
Knop 3 gebruikt string sSql om query toch eerst op te bouwen.
'Om meer dan 1 veld in te vullen code van knop 3 vervangen door volgende:
PUBLIC SUB btInsert3_Click()
DIM sSql AS String
sSql = "INSERT INTO test (naam, opm) VALUES (&1, &2)"
resQuery = $hConTest.Exec(sSql, TextBox2.Text, TextBox3.Text)
END
Ook in een select kan dat gebruikt worden, bv:
sSql = "SELECT tijd FROM test WHERE naam = &1 AND opm = &2"
resQuery = $hConTest.Exec(sSql, TextBox2.Text, TextBox3.Text)
Message.Info(resQuery!tijd)
(kan toegevoegd worden aan knop 3 code)
|
Tags: