sql >> Database >  >> RDS >> Mysql

Onbekende kolom in veldlijst

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.



  1. Modal Window-berichten weergeven in Oracle Forms met Show_Alert

  2. Hoe aanmeldingen werken op gekoppelde servers (T-SQL-voorbeelden)

  3. Hoe de SQL-query optimaliseren met het berekenen van afstand op lengte- en breedtegraad?

  4. Wat is het voordeel van try {} catch {} versus if {} else {}