Det er fordi din
VALUES (%s,%s)
omgiver ikke navne- og familievariablens indhold med anførselstegn. Derfor tænker din back-end Sql-motor din mohsen
er et kolonnenavn, ikke en værdi.
Brug i stedet f.eks.
VALUES (''%s'',''%s'')
som i
Namee := 'mohsen';
Family := 'dolatshah';
aSQLText:= 'INSERT INTO b_tbl(Name,Family) VALUES (''%s'',''%s'')';
aSQLCommand := Format(aSQLText,[namee,family]);
I den originale version af mit svar forklarede jeg, hvordan du løser dit problem ved at "fordoble" enkelte anførselstegn i den SQL, du forsøgte at bygge, fordi det forekom mig, at du havde svært ved at se (bogstaveligt talt) hvad der var galt med hvad du lavede.
En alternativ (og bedre) måde at undgå dit problem på (og den jeg altid bruger i det virkelige liv) er at bruge QuotedStr()
fungere. Den samme kode ville så blive til
aSQLText := 'INSERT INTO b_tbl (Name, Family) VALUES (%s, %s)';
aSQLCommand := Format(aSQLText, [QuotedStr(namee), QuotedStr(family)]);
Ifølge onlinehjælpen:
Hvad det betyder med "gentaget" er, hvad jeg har omtalt som "fordobling". Hvorfor det er vigtigt, og hovedårsagen til, at jeg bruger QuotedStr, er for at undgå, at SQL db-motoren kaster en fejl, når den værdi, du vil sende, indeholder et enkelt anførselstegn som i O'Reilly .
Prøv at tilføje en række, der indeholder det navn, til din tabel ved hjælp af MySql Workbench, og du vil se, hvad jeg mener.
Så ikke kun gør brug af QuotedStr konstruering af SQL-sætninger som strenge i Delphi-kode mindre fejltilbøjelige, men det undgår også problemer i back-end.