sql >> Databasteknik >  >> RDS >> Mysql

Okänd kolumn i fältlistan

Det är för att din

VALUES (%s,%s)

omger inte namnet och familjevariabelns innehåll med citattecken. Därför tror din back-end SQL-motor din mohsen är ett kolumnnamn, inte ett värde.

Använd istället t.ex.

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 ursprungliga versionen av mitt svar förklarade jag hur du åtgärdar ditt problem genom att "dubbla upp" enstaka citattecken i SQL-filen du försökte bygga, eftersom det verkade för mig att du hade svårt att se (bokstavligen) vad som var fel med vad du gjorde.

Ett alternativt (och bättre) sätt att undvika ditt problem (och det jag alltid använder i verkliga livet) är att använda QuotedStr() fungera. Samma kod skulle då bli

aSQLText := 'INSERT INTO b_tbl (Name, Family) VALUES (%s, %s)'; 
aSQLCommand := Format(aSQLText, [QuotedStr(namee), QuotedStr(family)]);

Enligt onlinehjälpen:

Vad det betyder med "upprepad" är vad jag har kallat "fördubbling". Varför det är viktigt, och det främsta skälet till att jag använder QuotedStr är för att undvika att SQL db-motorn ger ett felmeddelande när värdet du vill skicka innehåller ett enda citattecken som i O'Reilly .

Försök att lägga till en rad som innehåller det namnet till din tabell med MySql Workbench så förstår du vad jag menar.

Så att inte bara använda QuotedStr gör att konstruera SQL-satser som strängar i Delphi-kod mindre felbenägen, utan det undviker också problem i back-end också.



  1. Skapa en MySQL SET från en sträng

  2. Hur undkommer jag ett procenttecken i T-SQL?

  3. Välja en kolumn som också är ett nyckelord i MySQL

  4. Mysql-fråga med Left Join är för mycket långsam