Het is omdat je
VALUES (%s,%s)
omringt de inhoud van de naam en de familievariabele niet met aanhalingstekens. Daarom denkt uw back-end Sql-engine dat uw mohsen
is een kolomnaam, geen waarde.
Gebruik in plaats daarvan bijv.
VALUES (''%s'',''%s'')
zoals in
Namee := 'mohsen';
Family := 'dolatshah';
aSQLText:= 'INSERT INTO b_tbl(Name,Family) VALUES (''%s'',''%s'')';
aSQLCommand := Format(aSQLText,[namee,family]);
In de originele versie van mijn antwoord heb ik uitgelegd hoe u uw probleem kunt oplossen door enkele aanhalingstekens te "verdubbelen" in de SQL die u probeerde te bouwen, omdat het mij leek dat u moeite had om (letterlijk) te zien wat er mis was met wat je aan het doen was.
Een alternatieve (en betere) manier om uw probleem (en degene die ik in het echte leven altijd gebruik) te vermijden, is door de QuotedStr()
te gebruiken functie. Dezelfde code wordt dan
aSQLText := 'INSERT INTO b_tbl (Name, Family) VALUES (%s, %s)';
aSQLCommand := Format(aSQLText, [QuotedStr(namee), QuotedStr(family)]);
Volgens de online hulp:
Wat het betekent met "herhaald" is wat ik "verdubbelen" heb genoemd. Waarom dat belangrijk is, en de belangrijkste reden dat ik QuotedStr gebruik, is om te voorkomen dat de Sql db-engine een fout genereert wanneer de waarde die u wilt verzenden een enkel aanhalingsteken bevat, zoals in O'Reilly .
Probeer een rij met die naam aan je tabel toe te voegen met MySql Workbench en je zult zien wat ik bedoel.
Het gebruik van QuotedStr maakt het construeren van SQL-statements als strings in Delphi-code dus niet alleen minder foutgevoelig, maar voorkomt ook problemen aan de achterkant.