{------------------------------------------------------------------------------} {µ¥ÔªÃû³Æ£ºuSaveData.pas } {Ä£¿éÃû³Æ£º¹ý³ÌÊý¾Ý´æ´¢Ä£¿é } {¹¦ÄÜÃèÊö£º½«ÏµÍ³²ÎÊý´æ´¢µ½±¾µØSQLiteÊý¾Ý¿â } {½¨Á¢ÈÕÆÚ£º2023-10-31 } {ÐÞ¸ÄÈÕÆÚ£º2023-10-31 } {°æÈ¨ËùÓУºÀîÁ¼Í¥ liangtingli@outlook.com } {------------------------------------------------------------------------------} unit uSaveData; interface uses Windows, Classes, SysUtils, Dialogs, StrUtils, DateUtils, Variants, Grids, Math, StdCtrls, SQLite3, SQLiteTable3, sListBox, Global, log4me, PubUtils; {ÉêÃ÷ÄÚ²¿µ÷Óú¯Êý} procedure createConfigSql(table:string); procedure insertConfigSql(table:string; no:Integer; nam,val:String); procedure updateConfigSql(table:string; nam,val:String); function queryConfigSql(table,nam:string):string; function queryConfigCnt(table,nam:string):integer; procedure createGrainSql(table:string); procedure insertGrainSql(table:string; cod:Integer; no,nam:String;coef1,coef2,coef3,coef4,coef5,intercept:String; flag:Integer=0); function queryGrainSql(table,nam:string):TGrainRec; function queryGrainSql1(table:string; cod:Integer):TGrainRec; procedure queryGrainlistSql(table:string; lb:TsListBox; flag:Integer=2); procedure createTestSql(table:string); procedure insertTestSql(table:string; mode,is_auto,tim,cod:Integer; nam,info:String; mois,temp,water:double); {ÉêÃ÷Íⲿµ÷Óú¯Êý} procedure InitConfig(); procedure InitConn(); procedure InitGrain(); procedure InitTestDB(); procedure InitWeight(); procedure InitManager(); procedure AddGrainRecord(nam:string; rec:TGrainRec); procedure deleteGrainSql(table,nam: string); procedure updateNameSql(table,new,nam: string; newcod,cod: Integer); function queryGrainNumSql(table:string; nam:string; cod:Integer):Integer; procedure queryGrainTypeSql(table:string; typ:Integer; cb:TComboBox); procedure LoadParam(); procedure SaveParam(); procedure SaveWgParam(); procedure SaveVerifyParam(); procedure SaveInterceptParam(val:string); implementation //--------configÅäÖÃÊý¾Ý¿âº¯Êý-------------------------------------------- //´´½¨configÊý¾Ý¿â procedure createConfigSql(table:string); var sql : String; sqldb : TSQLiteDatabase; begin //½¨ configÊý¾Ý±í sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); try if not sqldb.TableExists(table) then begin sql := 'CREATE TABLE [' + table + '] (' +'[id] INTEGER PRIMARY KEY,' +'[nam] VARCHAR(20) NULL,' +'[val] VARCHAR(200) NULL );'; sqldb.ExecSQL(sql); //н¨Ë÷Òý sql := 'CREATE INDEX index_'+table+' ON ['+table+']([id]);'; sqldb.ExecSQL(sql); end; finally FreeAndNil(sqldb); end; end; //²åÈëÒ»ÌõconfigÊý¾Ý procedure insertConfigSql(table:string; no:Integer; nam,val:String); var sql : String; sqldb : TSQLiteDatabase; begin sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); try //¿ªÆôÊÂÎñ£¬²åÈëÊý¾Ý sqldb.BeginTransaction; sql := Format('INSERT INTO [%s](id,nam,val) VALUES(%d,"%s","%s");', [table,no,nam,String(AnsiToUtf8(val))]); sqldb.ExecSQL(sql); sqldb.Commit; //Ö´ÐÐÊÂÎñ finally FreeAndNil(sqldb); end; end; //¸üÐÂÒ»ÌõconfigÊý¾Ý procedure updateConfigSql(table:string; nam,val:String); var sql : String; sqldb : TSQLiteDatabase; begin sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); try sql := Format('UPDATE [%s] SET val="%s" WHERE nam="%s";', [table,String(AnsiToUtf8(val)),nam]); sqldb.ExecSQL(sql); finally FreeAndNil(sqldb); end; end; //²éѯһÌõconfigÊý¾Ý£¨Ö¸¶¨name£© function queryConfigSql(table,nam:string):string; var sqldb : TSQLiteDatabase; sqltb : TSQLiteTable; sql : String; begin //³õʼ»¯·µ»ØÖµ Result := ''; //²éѯtable±ívalÁÐ sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); try sql := Format('SELECT * FROM [%s] WHERE nam="%s"',[table,nam]); sqltb := sqldb.GetTable(sql); if sqltb.Count>0 then Result := Utf8ToAnsi(sqltb.FieldAsString(sqltb.FieldIndex['val'])); finally FreeAndNil(sqltb); FreeAndNil(sqldb); end; end; //²éѯconfigÊý¾ÝÊýÁ¿ function queryConfigCnt(table,nam:string):integer; var sqldb : TSQLiteDatabase; sqltb : TSQLiteTable; sql : String; begin //³õʼ»¯·µ»ØÖµ //Result := 0; //²éѯtable±ívalÁÐ sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); try sql := Format('SELECT * FROM [%s] WHERE nam="%s"',[table,nam]); sqltb := sqldb.GetTable(sql); Result := sqltb.Count; finally FreeAndNil(sqltb); FreeAndNil(sqldb); end; end; //-------- GrainÊý¾Ý¿âº¯Êý-------------------------------------------- //´´½¨ grainÊý¾Ý¿â£¬Ôö¼Ó½Ø¾à×Ö¶Î procedure createGrainSql(table:string); var sql : String; sqldb : TSQLiteDatabase; begin //½¨ configÊý¾Ý±í sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); try if not sqldb.TableExists(table) then begin sql := 'CREATE TABLE [' + table + '] (' +'[id] INTEGER PRIMARY KEY,' //id±àºÅ +'[cod] INTEGER NULL,' //Ò»¼¶·ÖÀà´úÂë +'[no] VARCHAR(10) NULL,' //Á¸ÖÖ±àºÅ +'[nam] VARCHAR(20) NULL,' //Á¸ÖÖÃû³Æ +'[coef1] VARCHAR(32) NULL,' //У׼ϵÊý +'[coef2] VARCHAR(32) NULL,' +'[coef3] VARCHAR(32) NULL,' +'[coef4] VARCHAR(32) NULL,' +'[coef5] VARCHAR(32) NULL,' +'[intercept] VARCHAR(32) NULL,' //½Ø¾à +'[flag] INTEGER NULL );'; //ÊÇ·ñÒ»¼¶·ÖÀà sqldb.ExecSQL(sql); //н¨Ë÷Òý sql := 'CREATE INDEX index_'+table+' ON ['+table+']([id]);'; sqldb.ExecSQL(sql); end; finally FreeAndNil(sqldb); end; end; //²åÈëÒ»ÌõconfigÊý¾Ý£¬Ôö¼Ó½Ø¾à procedure insertGrainSql(table:string; cod:Integer; no,nam:String;coef1,coef2,coef3,coef4,coef5,intercept:String; flag:Integer=0); var sql : String; sqldb : TSQLiteDatabase; begin sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); try //¿ªÆôÊÂÎñ£¬²åÈëÊý¾Ý sqldb.BeginTransaction; sql := Format('INSERT INTO [%s](cod,no,nam,coef1,coef2,coef3,coef4,coef5,intercept,flag) '+ 'VALUES(%d,"%s","%s","%s","%s","%s","%s","%s","%s",%d);', [table, cod, no, String(AnsiToUtf8(nam)), coef1, coef2, coef3, coef4, coef5, intercept, flag]); sqldb.ExecSQL(sql); sqldb.Commit; //Ö´ÐÐÊÂÎñ finally FreeAndNil(sqldb); end; end; //--------------------------------------------------------------------- //ͨ¹ý´óÀànam£¬²éѯ´óÀàCod function queryGrainMainCodSql(table:string; nam:string):Integer; var sqldb : TSQLiteDatabase; sqltb : TSQLiteTable; sql : String; begin //²éѯtable±ívalÁÐ sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); try sql := Format('select cod from [%s] where flag=1 and nam="%s";',[table,AnsiToUtf8(nam)]); sqltb := sqldb.GetTable(sql); Result := sqltb.FieldAsInteger(sqltb.FieldIndex['cod']); finally FreeAndNil(sqltb); FreeAndNil(sqldb); end; end; //ʹÓÃnam²éѯһÌõgrainÊý¾Ý //À©³äÒ»¸ö½Ø¾à²ÎÊý£¬liliangting 2025.1.16 function queryGrainSql(table,nam:string):TGrainRec; var sqldb : TSQLiteDatabase; sqltb : TSQLiteTable; sql,scod : String; cod : Integer; begin //³õʼ»¯·µ»ØÖµ Result.Code := 0; Result.No := ''; Result.Name := ''; Result.Coef[0] := '0'; Result.Coef[1] := '0'; Result.Coef[2] := '0'; Result.Coef[3] := '0'; Result.Coef[4] := '0'; Result.Intercept := '0'; Result.flag := false; //Èç¹ûnamÊÇ£ºÓñÃ×-¶«±±-->²ð·ÖΪ¶«±±£¬´«ÈëÕæÊµnam if Pos('-', nam)>0 then begin scod:= SplitStr(nam, '-', 0); nam := SplitStr(nam, '-', 1); //ͨ¹ý´óÀàÃû³Æ²écod cod := queryGrainMainCodSql(t_Grain, scod); end else begin//Èç¹ûnamÊÇ£ºÓñÃ×£¬Í¨¹ýÃû³Æ²écod cod := queryGrainMainCodSql(t_Grain, nam); end; //²éѯtable±ívalÁÐ sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); try sql := Format('SELECT * FROM [%s] WHERE nam="%s" and cod=%d;',[table,AnsiToUtf8(nam),cod]); sqltb := sqldb.GetTable(sql); if sqltb.Count>0 then begin Result.Code := sqltb.FieldAsInteger(sqltb.FieldIndex['cod']); Result.No := sqltb.FieldAsString(sqltb.FieldIndex['no']); //Ôö¼ÓÁ¸ÖÖ±àÂë Result.Name := Utf8ToAnsi(sqltb.FieldAsString(sqltb.FieldIndex['nam'])); Result.Coef[0] := sqltb.FieldAsString(sqltb.FieldIndex['coef1']); Result.Coef[1] := sqltb.FieldAsString(sqltb.FieldIndex['coef2']); Result.Coef[2] := sqltb.FieldAsString(sqltb.FieldIndex['coef3']); Result.Coef[3] := sqltb.FieldAsString(sqltb.FieldIndex['coef4']); Result.Coef[4] := sqltb.FieldAsString(sqltb.FieldIndex['coef5']); Result.Intercept := sqltb.FieldAsString(sqltb.FieldIndex['intercept']); //Ôö¼Ó½Ø¾à Result.flag := IntToBool(sqltb.FieldAsInteger(sqltb.FieldIndex['flag'])); //Ôö¼Ó´óÀà±êÖ¾ end; finally FreeAndNil(sqltb); FreeAndNil(sqldb); end; end; ////////////////////////////////////////////////////////////////////////// //ʹÓÃcod²éѯһÌõgrainÊý¾Ý //×¢Ò⣺´ÓCod²éѯÁ¸ÖÖÐÅÏ¢»áÖØ¸´£¬Ôö¼Óflag=1£¬½ö²é´óÀàÐÅÏ¢£¡£¡£¡ function queryGrainSql1(table:string; cod:Integer):TGrainRec; var sqldb : TSQLiteDatabase; sqltb : TSQLiteTable; sql : String; begin //³õʼ»¯·µ»ØÖµ Result.Code := 0; Result.No := ''; Result.Name := ''; Result.Coef[0] := '0'; Result.Coef[1] := '0'; Result.Coef[2] := '0'; Result.Coef[3] := '0'; Result.Coef[4] := '0'; Result.Intercept := '0'; Result.flag := false; //²éѯtable±ívalÁÐ sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); try /////////////////////////////////////////////////////////////// //ÕâÀïµÄ²éѯÌõ¼þ¹ýÉÙ£¬²éѯ½á¹û´óÓÚ1£¡£¡£¡ sql := Format('SELECT * FROM [%s] WHERE cod=%d and flag=1;',[table,cod]); /////////////////////////////////////////////////////////////// sqltb := sqldb.GetTable(sql); if sqltb.Count>0 then begin Result.Code := sqltb.FieldAsInteger(sqltb.FieldIndex['cod']); Result.No := sqltb.FieldAsString(sqltb.FieldIndex['no']); //Ôö¼ÓÁ¸ÖÖ±àÂë Result.Name := Utf8ToAnsi(sqltb.FieldAsString(sqltb.FieldIndex['nam'])); Result.Coef[0] := sqltb.FieldAsString(sqltb.FieldIndex['coef1']); Result.Coef[1] := sqltb.FieldAsString(sqltb.FieldIndex['coef2']); Result.Coef[2] := sqltb.FieldAsString(sqltb.FieldIndex['coef3']); Result.Coef[3] := sqltb.FieldAsString(sqltb.FieldIndex['coef4']); Result.Coef[4] := sqltb.FieldAsString(sqltb.FieldIndex['coef5']); Result.Intercept := sqltb.FieldAsString(sqltb.FieldIndex['intercept']); //Ôö¼Ó½Ø¾à Result.flag := IntToBool(sqltb.FieldAsInteger(sqltb.FieldIndex['flag'])); //Ôö¼Ó´óÀà±êÖ¾ end; finally FreeAndNil(sqltb); FreeAndNil(sqldb); end; end; ///////////////////////////////////////////////////////////////////////// //²éѯÁ¸ÖÖÇåµ¥ procedure queryGrainlistSql(table:string; lb:TsListBox; flag:Integer=2); var sqldb : TSQLiteDatabase; sqltb : TSQLiteTable; sql : String; begin //²éѯtable±ívalÁÐ sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); try if (flag=0)or(flag=1) then sql := Format('select a.*,b.nam as codnam from [%s] a left join grain b on a.cod = b.no where a.flag=%d;',[table,flag]) else sql := Format('select a.*,b.nam as codnam from [%s] a left join grain b on a.cod = b.no ;',[table]); sqltb := sqldb.GetTable(sql); lb.Items.Clear; while not sqltb.EOF do begin if sqltb.FieldAsInteger(sqltb.FieldIndex['flag'])=1 then lb.Items.Add(Utf8ToAnsi(sqltb.FieldAsString(sqltb.FieldIndex['nam']))) else lb.Items.Add(Format('%s-%s', [Utf8ToAnsi(sqltb.FieldAsString(sqltb.FieldIndex['codnam'])), Utf8ToAnsi(sqltb.FieldAsString(sqltb.FieldIndex['nam']))])); sqltb.Next; end; finally FreeAndNil(sqltb); FreeAndNil(sqldb); end; end; //²éѯ×îеÄÁ¸ÖÖ±àºÅno function queryGrainCodSql(table:string):String; var sqldb : TSQLiteDatabase; sqltb : TSQLiteTable; sql : String; begin //²éѯtable±ívalÁÐ sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); try sql := Format('SELECT MAX(no)+1 max_no FROM [%s];',[table]); sqltb := sqldb.GetTable(sql); Result := sqltb.FieldAsString(sqltb.FieldIndex['max_no']); finally FreeAndNil(sqltb); FreeAndNil(sqldb); end; end; //°´Á¸ÖÖnam²éѯ¼Ç¼ÊýÁ¿ function queryGrainNumSql(table:string; nam:string; cod:Integer):Integer; var sqldb : TSQLiteDatabase; sqltb : TSQLiteTable; sql : String; begin //²éѯtable±ívalÁÐ sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); try sql := Format('SELECT * FROM [%s] WHERE [nam]="%s" and [cod]=%d;',[table ,AnsiToUtf8(nam), cod]); sqltb := sqldb.GetTable(sql); Result := sqltb.Count; finally FreeAndNil(sqltb); FreeAndNil(sqldb); end; end; //²éѯÁ¸ÖÖ´óÀ࣬¼ÓÔØµ½ComboBox procedure queryGrainTypeSql(table:string; typ:Integer; cb:TComboBox); var sqldb : TSQLiteDatabase; sqltb : TSQLiteTable; sql : String; begin //²éѯtable±ívalÁÐ sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); try sql := Format('SELECT nam FROM [%s] WHERE [flag]=%d order by cod asc;',[table, typ]); sqltb := sqldb.GetTable(sql); cb.Items.Clear; while not sqltb.EOF do begin cb.Items.Add(Utf8ToAnsi(sqltb.FieldAsString(sqltb.FieldIndex['nam']))); sqltb.Next; end; cb.ItemIndex :=0; finally FreeAndNil(sqltb); FreeAndNil(sqldb); end; end; //¸üÐÂÒ»ÌõgrainÊý¾Ý£¨°´Ãû³ÆºÍ´óÀà´úÂ룩 procedure updateGrainSql(table:string; rec:TGrainRec); var sql : String; sqldb : TSQLiteDatabase; begin sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); try sql := Format('UPDATE [%s] SET no="%s",coef1="%s",coef2="%s",coef3="%s",coef4="%s",coef5="%s",flag=%d WHERE nam="%s" and cod=%d;', [table, rec.No, rec.Coef[0], rec.Coef[1], rec.Coef[2], rec.Coef[3], rec.Coef[4], Integer(rec.flag), AnsiToUtf8(rec.Name), rec.Code]); sqldb.ExecSQL(sql); finally FreeAndNil(sqldb); end; end; //¸üÐÂÒ»ÌõgrainÊý¾Ý£¨°´´óÀà´úÂ룩 procedure updateGrainSql1(table:string; rec:TGrainRec); var sql : String; sqldb : TSQLiteDatabase; begin sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); try sql := Format('UPDATE [%s] SET coef1="%s",coef2="%s",coef3="%s",coef4="%s",coef5="%s" WHERE cod=%d;', [table, rec.Coef[0], rec.Coef[1], rec.Coef[2], rec.Coef[3], rec.Coef[4], rec.Code]); sqldb.ExecSQL(sql); finally FreeAndNil(sqldb); end; end; //¸üнؾà²ÎÊý procedure updateInterceptSql(table,val,name: string; cod: Integer); var sql : String; sqldb : TSQLiteDatabase; begin sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); try sql := Format('UPDATE [%s] SET intercept="%s" WHERE nam="%s" and cod=%d;', [table, val, AnsiToUtf8(name), cod]); sqldb.ExecSQL(sql); finally FreeAndNil(sqldb); end; end; //¸üÐÂÁ¸ÖÖÃû³Æ procedure updateNameSql(table,new,nam: string; newcod,cod: Integer); var sql : String; sqldb : TSQLiteDatabase; begin sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); try sql := Format('UPDATE [%s] SET nam="%s",cod=%d WHERE nam="%s" and cod=%d;', [table, AnsiToUtf8(new), newcod, AnsiToUtf8(nam), cod]); sqldb.ExecSQL(sql); finally FreeAndNil(sqldb); end; end; //ɾ³ýÁ¸ÖÖÐÅÏ¢--¸ù¾ÝnamºÍcodɾ³ý procedure deleteGrainSql(table, nam: string); var sqldb : TSQLiteDatabase; sql,scod : String; cod : Integer; begin //Èç¹ûnamÊÇ£ºÓñÃ×-¶«±±-->²ð·ÖΪ¶«±±£¬´«ÈëÕæÊµnam if Pos('-', nam)>0 then begin scod:= SplitStr(nam, '-', 0); nam := SplitStr(nam, '-', 1); //ͨ¹ý´óÀàÃû³Æ²écod cod := queryGrainMainCodSql(t_Grain, scod); end else begin//Èç¹ûnamÊÇ£ºÓñÃ×£¬Í¨¹ýÃû³Æ²écod cod := queryGrainMainCodSql(t_Grain, nam); end; sqldb := TSQLiteDatabase.Create(glAppPath + CONFIG_DIR + table + '.db'); try sql := Format('DELETE FROM [%s] WHERE [nam]="%s" and [cod]=%d;', [table, AnsiToUtf8(nam), cod]); sqldb.ExecSQL(sql); finally FreeAndNil(sqldb); end; end; //-------- TestÊý¾Ý¿âº¯Êý-------------------------------------------- //´´½¨ testÊý¾Ý¿â procedure createTestSql(table:string); var sql : String; sqldb : TSQLiteDatabase; begin //½¨ configÊý¾Ý±í sqldb := TSQLiteDatabase.Create(glAppPath + DATA_DIR + table + '.db'); try if not sqldb.TableExists(table) then begin sql := 'CREATE TABLE [' + table + '] (' +'[id] INTEGER PRIMARY KEY,' //×Ô¶¯±àºÅ +'[mod] INTEGER NULL,' //×Ô¶¯Ä£Ê½=0£¬ÊÖ¶¯Ä£Ê½=1 +'[is_auto] INTEGER CHECK ([is_auto] IN (0, 1)),' //Ôö¼Ó×Ô¶¯±£´æ±êÖ¾ +'[tim] INTEGER NULL,' //ÈÕÆÚʱ¼ä +'[cod] INTEGER NULL,' //Á¸ÖÖ´úÂë +'[nam] VARCHAR(20) NULL,' //Á¸ÖÖÃû³Æ +'[info] VARCHAR(50) NULL,' //Ñù±¾ÐÅÏ¢ +'[mois] FLOAT NULL,' //º¬Ë®ÂÊ //+'[ratio] FLOAT NULL,' //+'[weight] FLOAT NULL,' +'[temp] FLOAT NULL,' //ÎÂ¶È +'[water] FLOAT NULL );'; //ʪ¶È sqldb.ExecSQL(sql); //н¨Ë÷Òý sql := 'CREATE INDEX index_'+table+' ON ['+table+']([id]);'; sqldb.ExecSQL(sql); end; finally FreeAndNil(sqldb); end; end; //²åÈëÒ»Ìõ testÊý¾Ý procedure insertTestSql(table:string; mode,is_auto,tim,cod:Integer; nam,info:String; mois,temp,water:double); var sql : String; sqldb : TSQLiteDatabase; begin sqldb := TSQLiteDatabase.Create(glAppPath + DATA_DIR + table + '.db'); try //¿ªÆôÊÂÎñ£¬²åÈëÊý¾Ý sqldb.BeginTransaction; sql := Format('INSERT INTO [%s](mod,is_auto,tim,cod,nam,info,mois,temp,water) VALUES(%d,%d,%d,%d,"%s","%s",%.6f,%.6f,%.6f);', [table,mode,is_auto,tim,cod,String(AnsiToUtf8(nam)),String(AnsiToUtf8(info)),mois,temp,water]); sqldb.ExecSQL(sql); sqldb.Commit; //Ö´ÐÐÊÂÎñ finally FreeAndNil(sqldb); end; end; //-------µÚÒ»ÖÖȫд´½¨configÊý¾Ý¿âµÄ·½·¨--------------------------------------- //´´½¨Ð嵀 configÊý¾Ý¿â procedure InitConfig(); begin if not FileExists(glConfig_db) then begin //½¨ configÊý¾Ý¿â±í createConfigSql(t_Config); //³õʼ»¯Êý¾ÝÐÐ insertConfigSql(t_Config,1,'StartFreq','10500'); insertConfigSql(t_Config,2,'StopFreq','12000'); insertConfigSql(t_Config,3,'Step','50'); insertConfigSql(t_Config,4,'Freq','0'); insertConfigSql(t_Config,5,'Decay','1'); insertConfigSql(t_Config,6,'ASK','1'); insertConfigSql(t_Config,7,'Volume','0.52'); insertConfigSql(t_Config,8,'Tare','1040'); //ÐÂÔö¿ª»úÆô¶¯ÑÓʱʱ¼ä insertConfigSql(t_Config,9,'Delay','10'); //¼Ç¼ÈÕÖ¾ log4info(Format('ϵͳ£º³õʼ»¯´´½¨ %s-²ÎÊýÊý¾Ý¿â.',[t_Config])); end; end; //´´½¨Ð嵀 connÊý¾Ý¿â procedure InitConn(); begin if not FileExists(glConn_db) then begin //½¨ configÊý¾Ý¿â±í createConfigSql(t_Conn); //³õʼ»¯Êý¾ÝÐÐ insertConfigSql(t_Conn,1,'Ip','127.0.0.1'); insertConfigSql(t_Conn,2,'Port','1502'); insertConfigSql(t_Conn,3,'SerialPort','COM8'); insertConfigSql(t_Conn,4,'Baud','115200'); insertConfigSql(t_Conn,5,'Parity','N'); insertConfigSql(t_Conn,6,'Data_bit','8'); insertConfigSql(t_Conn,7,'Stop_bit','1'); insertConfigSql(t_Conn,8,'AutoRun','false'); insertConfigSql(t_Conn,9,'Time1','20'); insertConfigSql(t_Conn,10,'Time2','30'); //¼Ç¼ÈÕÖ¾ log4info(Format('ϵͳ£º³õʼ»¯´´½¨ %s-²ÎÊýÊý¾Ý¿â.',[t_Conn])); end; end; //´´½¨Ð嵀 grainÊý¾Ý¿â£¬Ôö¼Ó½Ø¾à procedure InitGrain(); begin if not FileExists(glGrain_db) then begin //½¨ configÊý¾Ý¿â±í createGrainSql(t_Grain); //³õʼ»¯Êý¾ÝÐÐ {insertGrainSql(t_Grain,1,'1','СÂó','65.160129655062','-0.107375833331','0.000063694808','-0.000000011576','0','0',1); insertGrainSql(t_Grain,2,'2','µ¾¹È','-8.443205789262','0.021404282111','-0.000008683206','0.000000001917','0','0',1); insertGrainSql(t_Grain,3,'3','»Æ¶¹','-6.204673384923','0.025161776479','0.000014765722','0.000000003440','0','0',1); insertGrainSql(t_Grain,4,'4','ÓñÃ×','-16.278037347152','0.033766686581','-0.000015923042','0.000000002881','0','0',1); } insertGrainSql(t_Grain,1,'1','µ¾¹È','0','0.01','0','0','0','0',1); insertGrainSql(t_Grain,2,'2','ÓñÃ×','0','0.01','0','0','0','0',1); insertGrainSql(t_Grain,3,'3','´ó¶¹','0','0.01','0','0','0','0',1); insertGrainSql(t_Grain,4,'4','СÂó','0','0.01','0','0','0','0',1); //¼Ç¼ÈÕÖ¾ log4info(Format('ϵͳ£º³õʼ»¯´´½¨ %s-²ÎÊýÊý¾Ý¿â.',[t_Grain])); end; end; //´´½¨Ð嵀 testÊý¾Ý¿â procedure InitTestDB(); begin if not FileExists(glData_db) then begin //½¨ configÊý¾Ý¿â±í createTestSql(t_Data); //¼Ç¼ÈÕÖ¾ log4info(Format('ϵͳ£º³õʼ»¯´´½¨ %s-´æ´¢Êý¾Ý¿â.',[t_Data])); end; end; //´´½¨ÐÂµÄ ÖØÁ¿Ð£×¼Êý¾Ý¿â procedure InitWeight(); begin if not FileExists(glWeight_db) then begin //½¨ weightÊý¾Ý¿â±í createConfigSql(t_Weight); //³õʼ»¯Êý¾ÝÐÐ insertConfigSql(t_Weight,1,'k','1'); insertConfigSql(t_Weight,2,'b','1'); insertConfigSql(t_Weight,3,'tare','0'); insertConfigSql(t_Weight,4,'range','0'); //Îó²î·¶Î§ insertConfigSql(t_Weight,5,'test1','0'); insertConfigSql(t_Weight,6,'test2','0'); insertConfigSql(t_Weight,7,'test3','0'); insertConfigSql(t_Weight,8,'std1','0'); insertConfigSql(t_Weight,9,'std2','0'); insertConfigSql(t_Weight,10,'std3','0'); //¼Ç¼ÈÕÖ¾ log4info(Format('ϵͳ£º³õʼ»¯´´½¨ %s-²ÎÊýÊý¾Ý¿â.',[t_Weight])); end; end; //´´½¨Ð嵀 manager Êý¾Ý¿â procedure InitManager(); begin if not FileExists(glManager_db) then begin //½¨ configÊý¾Ý¿â±í createConfigSql(t_Manager); //³õʼ»¯Êý¾ÝÐÐ insertConfigSql(t_Manager,1,'Admin','123456'); //¼Ç¼ÈÕÖ¾ log4info(Format('ϵͳ£º³õʼ»¯´´½¨ %s-Êý¾Ý¿â.',[t_Manager])); end; end; //н¨Ò»Ìõ grainÊý¾Ý procedure AddGrainRecord(nam:string; rec:TGrainRec); var no : String; begin if FileExists(glGrain_db) then begin //ÏȲéѯ×îеÄcod no := queryGrainCodSql(t_Grain); //ÐÂÔöÁ¸ÖÖÊý¾ÝÐÐ insertGrainSql(t_Grain, GrainType_rec.Code, no,nam, GrainType_rec.Coef[0], GrainType_rec.Coef[1], GrainType_rec.Coef[2], GrainType_rec.Coef[3], GrainType_rec.Coef[4], '0',0); //¼Ç¼ÈÕÖ¾ log4info(Format('ϵͳ£ºÊý¾Ý¿â [%s] ÐÂÔöÒ»ÌõÁ¸ÖÖÐÅÏ¢.',[t_Grain])); end; end; //------- ¼ÓÔØºÍ±£´æ¸÷ÀàConfigÅäÖÃÐÅÏ¢----------------------------------------- //¼ÓÔØ¸÷Àà²ÎÊý½á¹¹ procedure LoadParam(); var c : Char; begin //¼ÓÔØÏµÍ³²ÎÊý if FileExists(glConfig_db) then begin SysConfig.StartFreq := StrToFloatDef(queryConfigSql(t_Config,'StartFreq'), 10500); SysConfig.StopFreq := StrToFloatDef(queryConfigSql(t_Config,'StopFreq'), 12000); SysConfig.Step := StrToIntDef(queryConfigSql(t_Config,'Step'), 50); SysConfig.Freq := StrToFloatDef(queryConfigSql(t_Config,'Freq'), 0); SysConfig.Decay := StrToFloatDef(queryConfigSql(t_Config,'Decay'), 1); SysConfig.ASK := StrToIntDef(queryConfigSql(t_Config,'ASK'), 1); SysConfig.Volume := StrToFloatDef(queryConfigSql(t_Config,'Volume'), 0); SysConfig.Tare := StrToFloatDef(queryConfigSql(t_Config,'Tare'), 1000); //ÐÂÔö¿ª»úÆô¶¯ÑÓʱʱ¼ä if queryConfigSql(t_Config,'Delay')='' then insertConfigSql(t_Config,9,'Delay','10'); SysConfig.delay := StrToIntDef(queryConfigSql(t_Config,'Delay'), 0); //¼Ç¼ÈÕÖ¾ log4info(Format('ϵͳ£ºÔØÈë %s-ϵͳ²ÎÊý (É豸²ÎÊý).',[t_Config])); end; //¼ÓÔØÍ¨Ñ¶²ÎÊý if FileExists(glConn_db) then begin PlcConn.ip := queryConfigSql(t_Conn,'Ip'); PlcConn.port := StrToIntDef(queryConfigSql(t_Conn,'Port'), 1502); WrConn.SerialPort := queryConfigSql(t_Conn,'SerialPort'); WrConn.baud := StrToIntDef(queryConfigSql(t_Conn,'Baud'), 115200); WrConn.data_bit := StrToIntDef(queryConfigSql(t_Conn,'Data_bit'), 8); WrConn.stop_bit := StrToIntDef(queryConfigSql(t_Conn,'Stop_bit'), 1); glAutoRun := StrToBoolDef(queryConfigSql(t_Conn,'AutoRun'), False); glTime1 := StrToIntDef(queryConfigSql(t_Conn,'Time1'), 20); glTime2 := StrToIntDef(queryConfigSql(t_Conn,'Time2'), 30); //µ¥¶À´¦ÀícharÀàÐÍ CopyMemory(@c, PChar(queryConfigSql(t_Conn,'Parity')), 1); WrConn.parity := c; //ÐÂÔöÊý¾Ý´æ´¢²ÎÊý if queryConfigCnt(t_Conn, 'AutoSave')=0 then insertConfigSql(t_Conn, 11, 'AutoSave', '0'); if queryConfigCnt(t_Conn, 'SamplePrefix')=0 then insertConfigSql(t_Conn, 12, 'SamplePrefix', ''); if queryConfigCnt(t_Conn, 'SampleDir')=0 then insertConfigSql(t_Conn, 13, 'SampleDir', ''); if queryConfigCnt(t_Conn, 'SampleName')=0 then insertConfigSql(t_Conn, 14, 'SampleName', ''); smp.flag := StrToBoolDef(queryConfigSql(t_Conn,'AutoSave'), False); smp.prefix := queryConfigSql(t_Conn,'SamplePrefix'); smp.dir := queryConfigSql(t_Conn,'SampleDir'); smp.info := queryConfigSql(t_Conn,'SampleName'); //ÐÂÔöÐÄÌø²ÎÊý if queryConfigCnt(t_Conn, 'HeartIp')=0 then insertConfigSql(t_Conn, 15, 'HeartIp', '192.168.0.200'); PlcConn.heart_ip := queryConfigSql(t_Conn,'HeartIp'); if queryConfigCnt(t_Conn, 'HeartPort')=0 then insertConfigSql(t_Conn, 16, 'HeartPort', '8868'); PlcConn.heart_port := StrToIntDef(queryConfigSql(t_Conn,'HeartPort'), 8868); //¼Ç¼ÈÕÖ¾ log4info(Format('ϵͳ£ºÔØÈë %s-ϵͳ²ÎÊý (Ǥ¼ñϵͳ¡¢Ë®·ÖÒÇ¡¢´æ´¢²ÎÊý).',[t_Conn])); end; //¼ÓÔØÁ¸ÖÖУ׼ϵÊý if FileExists(glGrain_db) then begin Grain := queryGrainSql(t_Grain,'СÂó'); log4info(Format('ϵͳ£ºÔØÈë %s-Á¸ÖÖ²ÎÊý (Á¸ÖÖ´úÂë¡¢Ãû³Æ¡¢Ð£×¼ÏµÊý).',[t_Grain])); end; //¼ÓÔØÖØÁ¿Ð£×¼ÏµÊý if FileExists(glWeight_db) then begin Wg.k := StrToFloatDef(queryConfigSql(t_Weight,'k'), 1); Wg.b := StrToFloatDef(queryConfigSql(t_Weight,'b'), 1); Wg.tare := StrToFloatDef(queryConfigSql(t_Weight,'tare'), 0); Wg.range := StrToFloatDef(queryConfigSql(t_Weight,'range'), 0); Wg.test1 := StrToFloatDef(queryConfigSql(t_Weight,'test1'),0); Wg.test2 := StrToFloatDef(queryConfigSql(t_Weight,'test2'),0); Wg.test3 := StrToFloatDef(queryConfigSql(t_Weight,'test3'),0); Wg.std1 := StrToFloatDef(queryConfigSql(t_Weight,'std1'), 0); Wg.std2 := StrToFloatDef(queryConfigSql(t_Weight,'std2'), 0); Wg.std3 := StrToFloatDef(queryConfigSql(t_Weight,'std3'), 0); //¼Ç¼ÈÕÖ¾ log4info(Format('ϵͳ£ºÔØÈë %s-ϵͳ²ÎÊý (y=kx+b).',[t_Weight])); end; //¼ÓÔØµÇ¼¿ÚÁî if FileExists(glManager_db) then begin SysConfig.password := queryConfigSql(t_Manager,'Admin'); //¼Ç¼ÈÕÖ¾ log4info(Format('ϵͳ£ºÔØÈë %s-¹ÜÀí²ÎÊý (ÊÖ¶¯Ä£Ê½¿ÚÁî).',[t_Manager])); end; //µ÷ÊÔ²ÎÊý //showmessage(Format('PLC IP: %s:%d',[plcconn.ip, plcconn.prot])); //showmessage(Format('Wr :%s,%d,%s,%d,%d',[wrconn.SerialPort,wrconn.baud,wrconn.parity,wrconn.data_bit,wrconn.stop_bit])); end; //±£´æ¸÷Àà²ÎÊý½á¹¹ procedure SaveParam(); begin //±£´æÏµÍ³²ÎÊý if FileExists(glConfig_db) then begin updateConfigSql(t_Config,'StartFreq',FloatToStr(SysConfig.StartFreq)); updateConfigSql(t_Config,'StopFreq',FloatToStr(SysConfig.StopFreq)); updateConfigSql(t_Config,'Step', IntToStr(SysConfig.Step)); updateConfigSql(t_Config,'Freq',FloatToStr(SysConfig.Freq)); updateConfigSql(t_Config,'Decay',FloatToStr(SysConfig.Decay)); updateConfigSql(t_Config,'ASK', IntToStr(SysConfig.ASK)); updateConfigSql(t_Config,'Volume',FloatToStr(SysConfig.Volume)); updateConfigSql(t_Config,'Tare',FloatToStr(SysConfig.Tare)); updateConfigSql(t_Config,'Delay', IntToStr(SysConfig.delay)); //¼Ç¼ÈÕÖ¾ log4info(Format('ϵͳ£º±£´æ %s-ϵͳ²ÎÊý (É豸²ÎÊý).',[t_Config])); end; //±£´æÍ¨Ñ¶²ÎÊý if FileExists(glConn_db) then begin updateConfigSql(t_Conn,'Ip',PlcConn.ip); updateConfigSql(t_Conn,'Port',IntToStr(PlcConn.port)); updateConfigSql(t_Conn,'HeartIp',PlcConn.heart_ip); updateConfigSql(t_Conn,'HeartPort',IntToStr(PlcConn.heart_port)); updateConfigSql(t_Conn,'SerialPort',WrConn.SerialPort); updateConfigSql(t_Conn,'Baud',IntToStr(WrConn.baud)); updateConfigSql(t_Conn,'Parity',WrConn.Parity); updateConfigSql(t_Conn,'Data_bit',IntToStr(WrConn.Data_bit)); updateConfigSql(t_Conn,'Stop_bit',IntToStr(WrConn.Stop_bit)); updateConfigSql(t_Conn,'AutoRun',BoolToString(glAutoRun)); updateConfigSql(t_Conn,'Time1',IntToStr(glTime1)); updateConfigSql(t_Conn,'Time2',IntToStr(glTime2)); //Ôö¼ÓÊý¾Ý´æ´¢²ÎÊý updateConfigSql(t_Conn,'AutoSave',BoolToString(smp.flag)); updateConfigSql(t_Conn,'SamplePrefix',smp.prefix); updateConfigSql(t_Conn,'SampleDir', smp.dir); updateConfigSql(t_Conn,'SampleName', smp.info); //¼Ç¼ÈÕÖ¾ log4info(Format('ϵͳ£º±£´æ %s-ϵͳ²ÎÊý (Ǥ¼ñϵͳ¡¢Ë®·ÖÒÇ¡¢´æ´¢²ÎÊý).',[t_Conn])); end; //±£´æµÇ¼¿ÚÁî if FileExists(glManager_db) then begin updateConfigSql(t_Manager,'Admin',SysConfig.password); //¼Ç¼ÈÕÖ¾ log4info(Format('ϵͳ£º±£´æ %s-¹ÜÀí²ÎÊý (ÊÖ¶¯Ä£Ê½¿ÚÁî).',[t_Manager])); end; //±£´æÖØÁ¿ÏµÊý SaveWgParam(); end; //±£´æÖØÁ¿²ÎÊý procedure SaveWgParam(); begin //±£´æÖØÁ¿ÏµÊý if FileExists(glWeight_db) then begin updateConfigSql(t_Weight,'k',FloatToStr(Wg.k)); updateConfigSql(t_Weight,'b',FloatToStr(Wg.b)); updateConfigSql(t_Weight,'tare',FloatToStr(Wg.tare)); updateConfigSql(t_Weight,'range',FloatToStr(Wg.range)); updateConfigSql(t_Weight,'test1',FloatToStr(Wg.test1)); updateConfigSql(t_Weight,'test2',FloatToStr(Wg.test2)); updateConfigSql(t_Weight,'test3',FloatToStr(Wg.test3)); updateConfigSql(t_Weight,'std1',FloatToStr(Wg.std1)); updateConfigSql(t_Weight,'std2',FloatToStr(Wg.std2)); updateConfigSql(t_Weight,'std3',FloatToStr(Wg.std3)); //¼Ç¼ÈÕÖ¾ log4info(Format('ϵͳ£º±£´æ %s-²ÎÊý (y=kx+b).',[t_Weight])); end; end; //±£´æÐ£×¼²ÎÊýµ½Êý¾Ý¿â procedure SaveVerifyParam(); begin //±£´æÁ¸ÖÖ¹ØÁªµÄУ׼ϵÊý if FileExists(glGrain_db) then begin //Ð޸ĴóÀàʱ£¬Ð¡Ààͬ²½Ë¢Ð£¬·´Ö®²»¸Ä£¡ if Grain.flag then updateGrainSql1(t_Grain, Grain) else updateGrainSql(t_Grain, Grain); log4info(Format('ϵͳ£º±£´æ %s-Á¸ÖÖ²ÎÊý (Îå¸öУ׼ϵÊý).',[t_Grain])); end; end; //±£´æ½Ø¾à²ÎÊýµ½Êý¾Ý¿â procedure SaveInterceptParam(val:string); begin //grain.dbÐÂÔöÒ»ÁУ¬ÓÃÓÚ±£´æ½Ø¾à²ÎÊý if FileExists(glGrain_db) then begin updateInterceptSql(t_Grain,val,Grain.Name,Grain.Code); log4info(Format('ϵͳ£º±£´æ½Ø¾à²ÎÊý-[%s] µ½ [%s]Á¸ÖÖÐÅÏ¢.',[val, Grain.Name])); end; end; end.