delphi - 如何在delphi中修复它
问题描述
我有一个 Dbf 表,我需要在列中插入年份和日期,程序不会产生任何错误但列是空的
我尝试使用查询 sql 查询但失败了
procedure TForm1.Button1Click(Sender: TObject);
var year:string;
pogr_d:string;
begin
pogr_d:='';
year:='';
year:=copy(formatdatetime('yyyy',(DateTimePicker1.Date)),1,4);
Label1.Caption:=year;
Label2.Caption:=pogr_d;
if opendialog1.Execute then
if opendialog1.Filename <> null then
begin
TextReader1.FileName := opendialog1.FileName;
try
ImportFromText.Execute;
FDQuery1.Close;
FDQuery1.Active;
FDQuery1.SQL.Text:='update g_rabn.dbf set
year='+''''+year+'''' +' where year='+''''+'''';
FDQuery1.ExecSql;
Except
On E : Exception Do
ShowMessage(E.Message);
end;
end;
end;
end.
解决方案
您可以将此代码用作示例。我假设 [Date] 和 [Year] 字段属于 NVARCHAR(4) 类型。我还假设您已经设置了数据库连接 FConn。
要重现此示例,您将需要一个带有 DBGrid1、DateTimePicker1、Edit1、ADOQuery1、ADOQuery2、DataSource1 和两个按钮的 Form1:Button1 用于插入新记录,而 Button2 用于更新现有记录。
通过 DataSource1 将您的 DBGrid1 链接到 ADOQuery1。
uses
ADODB, DB, DateUtils;
type
TForm1 = class(TForm)
...
private
{ Private declarations }
FConn: TADOConnection;
FYear: Integer;
FMonth: Integer;
FDay: Integer;
FYearUpd: String;
...
const
SQL1 = 'INSERT [Dbf] ([Date], [Year]) VALUES (''%s%s'', ''%s'')';
SQL2 = 'UPDATE [Dbf] SET [Year] = ''%s'' WHERE Year = ''%s''';
procedure TForm1.FormCreate(Sender: TObject);
begin
// FConn connection initialization
ADOQuery1.Connection := FConn;
ADOQuery2.Connection := FConn;
ADOQuery1.SQL.Text := 'SELECT * FROM Dbf';
ADOQuery1.Open;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FYear := YearOf(DateTimePicker1.Date);
FMonth := MonthOf(DateTimePicker1.Date);
FDay := DayOf(DateTimePicker1.Date);
// Inserting a new record.
ADOQuery2.SQL.Text := Format(SQL1, [IntToStr(FDay), IntToStr(FMonth), IntToStr(FYear)]);
ADOQuery2.ExecSQL;
// Refreshing the DBGrid.
ADOQuery1.Close;
ADOQuery1.Open;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
FYear := YearOf(DateTimePicker1.Date);
FYearUpd := Trim(Edit1.Text);
// Updating existing records.
ADOQuery2.SQL.Text := Format(SQL2, [FYearUpd, IntToStr(FYear)]);
ADOQuery2.ExecSQL;
// Refreshing the DBGrid.
ADOQuery1.Close;
ADOQuery1.Open;
end;
推荐阅读
- web - 当公钥在 PEM 中分发时,如何使用 Web Crypto 验证 ES256 JWT 令牌?
- c# - 如何将 JSON 反序列化为 IList
> 键中有空格? - audiokit - 如何获得对触摸事件的最低音频延迟响应?
- javascript - 如何知道查询中缺少哪些参数?
- mysql - 在同一查询中重用计算字段
- javascript - ml5 (ml5.js):如何将自己的数据添加到 KNN 分类器中?
- java - 如何修复 Java2Word 生成的 ms-word 文档中的错误
- node.js - 通过节点 js 中的 JavaScript 的 Html datalist 选项
- laravel - 合并 2 个集合(保留相似的集合)
- angular - ngx-charts-bar-vertical-stacked 中没有数据显示