2017-06-28 5 views
1

J'essaye d'implémenter la fonctionnalité TSQLite3DataSet au programme Lazarus. Pour donner un MCVE est ici une table SQLite de base de données test.db:Comment faire pour appliquer des mises à jour à TSQLite3DataSet dans Lazarus

CREATE TABLE "ttest" (
    "ID" INTEGER PRIMARY KEY AUTOINCREMENT, 
    "Data" INTEGER) 

Pour mettre en œuvre l'instance TSQLite3Dataset je l'ai fait:

object Sqlite3Dataset1: TSqlite3Dataset 
    FileName = 'C:\Users\User\Desktop\SQLIte\test.db' 
    PrimaryKey = 'ID' 
    TableName = 'ttest' 
    end 

Il fonctionne très bien sauvegarder les données mises à jour et en annexe. Par exemple en utilisant ce code:

procedure TForm1.Button3Click(Sender: TObject); 
begin 
    if Sqlite3Dataset1.State in [dsEdit, dsInsert] then 
    Sqlite3Dataset1.Post; 
    Sqlite3Dataset1.ApplyUpdates; 
    Sqlite3Dataset1.RefetchData; 
end; 

Mais si je cède la vraie table vide à l'instance de classe:

CREATE TABLE "base" (
"ID" INTEGER PRIMARY KEY AUTOINCREMENT, 
"Code" varchar NOT NULL, 
"GCode" varchar DEFAULT NULL, 
"Fam" varchar DEFAULT NULL, 
"Name" varchar DEFAULT NULL, 
"Patr" varchar DEFAULT NULL, 
"Age" smallint DEFAULT NULL, 
"Gender" smallint DEFAULT NULL, 
"Invalid" smallint DEFAULT NULL, 
"AdmDate" date DEFAULT NULL, 
"Departament" smallint DEFAULT NULL, 
"DsAdm" varchar DEFAULT NULL, 
"DsClin" varchar DEFAULT NULL, 
"Surgery" varchar DEFAULT NULL, 
"ConditAdmission" smallint DEFAULT NULL, 
"DiagnRemarks" varchar DEFAULT NULL, 
"DiagnDuration" float DEFAULT NULL, 
"TrMethod" smallint DEFAULT NULL, 
"TreatDetails" varchar DEFAULT NULL, 
"DiseaseDuration" float DEFAULT NULL, 
"Acute" smallint DEFAULT NULL, 
"Course" varchar DEFAULT NULL, 
"Outcomes" smallint DEFAULT NULL, 
"GBA" smallint DEFAULT NULL, 
"GUA" smallint DEFAULT NULL, 
"Coag" smallint DEFAULT NULL, 
"PTI" smallint DEFAULT NULL, 
"Group" smallint DEFAULT NULL, 
"Stool" smallint DEFAULT NULL, 
"BCA" smallint DEFAULT NULL, 
"GP" smallint DEFAULT NULL, 
"Alb" smallint DEFAULT NULL, 
"Glob" smallint DEFAULT NULL, 
"Bil" smallint DEFAULT NULL, 
"BilCon" smallint DEFAULT NULL, 
"NonConBil" smallint DEFAULT NULL, 
"Chol" smallint DEFAULT NULL, 
"AST" smallint DEFAULT NULL, 
"ALT" smallint DEFAULT NULL, 
"AmilBl" smallint DEFAULT NULL, 
"AmilUr" smallint DEFAULT NULL, 
"DUr" smallint DEFAULT NULL, 
"Carbamide" smallint DEFAULT NULL, 
"Crea" smallint DEFAULT NULL, 
"Tim" smallint DEFAULT NULL, 
"Glu" smallint DEFAULT NULL, 
"RW" smallint DEFAULT NULL, 
"HBS" smallint DEFAULT NULL, 
"X-Ray" smallint DEFAULT NULL, 
"FGDS" smallint DEFAULT NULL, 
"ECG" smallint DEFAULT NULL, 
"Use" smallint DEFAULT NULL, 
"PeptUlcerGastr" smallint DEFAULT NULL, 
"PeptUlcerDuod" smallint DEFAULT NULL, 
"AcUlcer" smallint DEFAULT NULL, 
"Loc1" varchar DEFAULT NULL, 
"Loc2" varchar DEFAULT NULL, 
"Compl1" varchar DEFAULT NULL, 
"Compl2" varchar DEFAULT NULL, 
"Operation1" varchar DEFAULT NULL, 
"Operation2" varchar DEFAULT NULL, 
"ManipName" varchar DEFAULT NULL, 
"Manipulation" varchar DEFAULT NULL, 
"Coexist1" varchar DEFAULT NULL, 
"Coexist2" varchar DEFAULT NULL, 
"Coexist3" varchar DEFAULT NULL, 
"Coname" varchar DEFAULT NULL, 
"Coexisting" varchar DEFAULT NULL, 
"Cholecyst" smallint DEFAULT NULL, 
"Pancreatitis" smallint DEFAULT NULL, 
"GIB" smallint DEFAULT NULL, 
"Bulbitis" smallint DEFAULT NULL, 
"Hepatitis" smallint DEFAULT NULL, 
"Scar" smallint DEFAULT NULL, 
"Gastritis" smallint DEFAULT NULL, 
"Additional" smallint DEFAULT NULL, 
"NameofAddit" varchar DEFAULT NULL, 
"OtherName" smallint DEFAULT NULL, 
"Other" varchar DEFAULT NULL, 
"SocState" smallint DEFAULT NULL, 
"Occupation" varchar DEFAULT NULL, 
"Hazards" smallint DEFAULT NULL, 
"HazardsOther" varchar DEFAULT NULL, 
"SatisfGen" smallint DEFAULT NULL, 
"SatisfMoral" smallint DEFAULT NULL, 
"SatisfMater" smallint DEFAULT NULL, 
"UseNutrit" float DEFAULT NULL, 
"UseClothes" float DEFAULT NULL, 
"UseCulture" float DEFAULT NULL, 
"UseTreat" float DEFAULT NULL, 
"UseSport" float DEFAULT NULL, 
"FamCond" smallint DEFAULT NULL, 
"FamRelat" smallint DEFAULT NULL, 
"FamScand" smallint DEFAULT NULL, 
"FamScandReas" smallint DEFAULT NULL, 
"Stress" smallint DEFAULT NULL, 
"RelativesCount" smallint DEFAULT NULL, 
"RelativesPersons" varchar DEFAULT NULL, 
"Drugs" smallint DEFAULT NULL, 
"DrugsDetails" varchar DEFAULT NULL, 
"DietSubj" smallint DEFAULT NULL, 
"DietPlace" smallint DEFAULT NULL, 
"DietPlaceOther" varchar DEFAULT NULL, 
"DietDry" smallint DEFAULT NULL, 
"DietRegular" smallint DEFAULT NULL, 
"DietFreq" float DEFAULT NULL, 
"DietChew" smallint DEFAULT NULL, 
"DietObj" smallint DEFAULT NULL, 
"AlcoholFam" smallint DEFAULT NULL, 
"AlcoholSelf" smallint DEFAULT NULL, 
"AlcoholObj" smallint DEFAULT NULL, 
"AlcoholBeginAge" float DEFAULT NULL, 
"AlcoholBeforeYears" float DEFAULT NULL, 
"SmokeBeginAge" smallint DEFAULT NULL, 
"SmokeTotalYears" smallint DEFAULT NULL, 
"Smokes" smallint DEFAULT NULL, 
"SmokesCigarettes" smallint DEFAULT NULL, 
"ProphylPurp" smallint DEFAULT NULL, 
"Recommend" smallint DEFAULT NULL, 
"AcuteFreq" smallint DEFAULT NULL, 
"ReasontoCome" varchar DEFAULT NULL, 
"AddonA1" varchar DEFAULT NULL, 
"AddonS1" smallint DEFAULT NULL, 
"ExaminationOtherCount" smallint DEFAULT NULL, 
"ExaminationOtherName" varchar DEFAULT NULL, 
"Complications" varchar DEFAULT NULL, 
"AddonA2" varchar DEFAULT NULL, 
"AddonA3" varchar DEFAULT NULL, 
"Surgery1" varchar DEFAULT NULL, 
"Surgery2" varchar DEFAULT NULL, 
"Fio" varchar DEFAULT NULL, 
"Perf" smallint DEFAULT NULL, 
"Penetr" smallint DEFAULT NULL, 
"Malign" smallint DEFAULT NULL, 
"SmokesSigarettesNumber" float DEFAULT NULL, 
"Stenosis" tinyint DEFAULT NULL, 
"FamScandReas0" tinyint DEFAULT NULL, 
"FamScandReas1" tinyint DEFAULT NULL, 
"FamScandReas2" tinyint DEFAULT NULL, 
"FamScandReas3" tinyint DEFAULT NULL, 
"FamScandReas4" tinyint DEFAULT NULL, 
"FamScandReas5" tinyint DEFAULT NULL, 
"FamScandReas6" tinyint DEFAULT NULL, 
"Drugs0" tinyint DEFAULT NULL, 
"Drugs1" tinyint DEFAULT NULL, 
"Drugs2" tinyint DEFAULT NULL, 
"Drugs3" tinyint DEFAULT NULL, 
"Drugs4" tinyint DEFAULT NULL, 
"PeptUlcerUnknown" smallint DEFAULT NULL) 

Rien ne se fait après que je l'appelle ApplyUpdates. Les modifications ne sont pas enregistrées dans la base de données: elles ne sont ni mises à jour ni ajoutées.

Je suis bloqué par le problème. Est-ce que quelqu'un sait un moyen de faire face à cela?

Répondre

1

En fait, la réponse était la suivante:

La table a été créée de la manière lorsque les noms de champs ont été orthographié entre guillemets "". Ceci déguisait le fait qu'il y avait des champs Group, Glob (mots réservés) et X-Ray (contient minus) et ces mots n'étaient pas surlignés dans l'éditeur de requête. Lorsque TSQLiteDataSet.ApplyUpdate génère la chaîne SQL, elle ignore (n'ajoute pas) les guillemets des définitions des champs. J'ai remplacé les noms par Grp, Glb et XRay et le problème était résolu.