資料庫為access,有二個欄位:一個是 '獲取時間'(如2015-08-15 11:23:45),一個是 '時間段'(如11), 現在想在資料更新時,截取 '獲取時間' 中的 小時 插入到 '時間段' 中,但試了多次總是不成功,望大家指點。代碼如下:
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('UPDATE sjb SET 時間段 = DATEPART(hh, 獲取時間)');
ExecSQL;
end;
總是提示hh沒有默認值(應該是取不到值)
謝謝!!!
uj5u.com熱心網友回復:
你參考下, 編譯通過的procedure TForm1.FormCreate(Sender: TObject);
var
CreateDB:Variant;
sName, sql,Source: string;
begin
sName := ExtractFilePath(ParamStr(0))+'test.mdb';
Source:='Provider=Microsoft.Jet.OLEDB.4.0;'
+'Data Source='+sName;
if not FileExists(sName) then
begin
CreateDB:= CreateOleObject('ADOX.Catalog');
CreateDB.Create(Source);
sql:= 'create table sjb '+
'(±ào? COUNTER PRIMARY KEY,' +
' ??è?ê±?? datetime,'+
' ê±???? int)';
con1.ConnectionString:=Source;
con1.Connected:=true;
qry1.Connection:=con1;
qry1.Close;
qry1.SQL.Clear;
qry1.SQL.Add(sql);
qry1.ExecSQL();
end else
begin
con1.ConnectionString:=Source;
con1.Connected:=true;
qry1.Connection:=con1;
end;
end;
procedure TForm1.btn1Click(Sender: TObject);
var
sql: string;
begin
sql:= 'INSERT INTO sjb(??è?ê±??, ê±????) VALUES (Now(), 11) ';
qry1.Close;
qry1.SQL.Clear;
qry1.SQL.Add(sql);
qry1.ExecSQL();
end;
procedure TForm1.btn2Click(Sender: TObject);
var
sql: string;
begin
sql:= '(UPDATE sjb SET ê±???? = DATEPART(''h'', Now()))';
qry1.Close;
qry1.SQL.Clear;
qry1.SQL.Add(sql);
qry1.ExecSQL();
end;
uj5u.com熱心網友回復:
procedure TForm1.FormCreate(Sender: TObject);
var
CreateDB:Variant;
sName, sql,Source: string;
begin
sName := ExtractFilePath(ParamStr(0))+'test.mdb';
Source:='Provider=Microsoft.Jet.OLEDB.4.0;'
+'Data Source='+sName;
if not FileExists(sName) then
begin
CreateDB:= CreateOleObject('ADOX.Catalog');
CreateDB.Create(Source);
sql:= 'create table sjb '+
'(編號 COUNTER PRIMARY KEY,' +
' 獲取時間 datetime,'+
' 時間段 int)';
con1.ConnectionString:=Source;
con1.Connected:=true;
qry1.Connection:=con1;
qry1.Close;
qry1.SQL.Clear;
qry1.SQL.Add(sql);
qry1.ExecSQL();
end else
begin
con1.ConnectionString:=Source;
con1.Connected:=true;
qry1.Connection:=con1;
end;
end;
procedure TForm1.btn1Click(Sender: TObject);
var
sql: string;
begin
sql:= 'INSERT INTO sjb(獲取時間, 時間段) VALUES (Now(), 11) ';
qry1.Close;
qry1.SQL.Clear;
qry1.SQL.Add(sql);
qry1.ExecSQL();
end;
procedure TForm1.btn2Click(Sender: TObject);
var
sql: string;
begin
sql:= '(UPDATE sjb SET 時間段 = DATEPART(''h'', Now()))';
qry1.Close;
qry1.SQL.Clear;
qry1.SQL.Add(sql);
qry1.ExecSQL();
end;
uj5u.com熱心網友回復:
首先謝謝這位兄弟。試了試,不行。ACCESS資料庫和SQLServer不太一樣,比如在Access中有些欄位需要加[],如:[編號/編碼]。
uj5u.com熱心網友回復:
1、對于日期時間,要預先設定默認字符
DateSeparator:='-';
ShortDateFormat:='yyyy-MM-dd';
LongDateFormat:='yyyy''年'',MM''月'',dd''日''';
TimeSeparator:=':';
TimeAMString:='AM';
TimePMString:='PM';
ShortTimeFormat:='hh:nn';
LongTimeFormat:='hh:nn:ss';
2、通過ADOQuery1打開檔案與DBGrid關聯,只在通過ADOQuery1的UpDate重繪資料。
3、
Button1連接資料庫檔案
Button2打開表
Button3更新一條資料
Button1通過回圈更新全部資料
4、相關代碼,已運行通過。請參考借用吧。
5、單元代碼:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls;
type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
Button1: TButton;
DataSource1: TDataSource;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
Button4: TButton;
ADOQuery2: TADOQuery;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
DateSeparator:='-';
ShortDateFormat:='yyyy-MM-dd';
LongDateFormat:='yyyy''年'',MM''月'',dd''日''';
TimeSeparator:=':';
TimeAMString:='AM';
TimePMString:='PM';
ShortTimeFormat:='hh:nn';
LongTimeFormat:='hh:nn:ss';
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOConnection1.Connected:=False;
ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;'+
'User ID=admin;'+ // 用戶ID
'Data Source=d:\a\d\MyData.mdb;'+ // 資料庫檔案
'Mode=Share Deny None;'+
'Jet OLEDB:Database Password=;'+ // 密碼
'Jet OLEDB:SFP=False';
ADOConnection1.Connected:=True;
end;
procedure TForm1.Button2Click(Sender: TObject);
var SQL:string;
begin
SQL:='select * From sjb order by 編號';
ADOQuery1.Active:=False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(SQL);
ADOQuery1.Active:=True;
end;
procedure TForm1.Button3Click(Sender: TObject);
var S,ID:string;
Date:TDateTime;
begin
with ADOQuery1 do
begin
S:=fieldbyname('獲取時間').asString;
if Length(S)=19 then
begin
ID:=fieldbyname('ID').asString;
Date:=StrToDateTime(S);
S:=FormatdateTime('HH',Date);
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('UPDATE sjb SET 時間段='+#39+S+#39+' where ID='+#39+ID+#39);
ADOQuery2.ExecSQL;
Requery;
end;
end;
end;
procedure TForm1.Button4Click(Sender: TObject);
var S,ID:string;
Date:TDateTime;
begin
with ADOQuery1 do
begin
while Not Eof do
begin
S:=fieldbyname('獲取時間').asString;
if Length(S)=19 then
begin
ID:=fieldbyname('ID').asString;
Date:=StrToDateTime(S);
S:=FormatdateTime('HH',Date);
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('UPDATE sjb SET 時間段='+#39+S+#39+' where ID='+#39+ID+#39);
ADOQuery2.ExecSQL;
end;
Next;
end;
Requery;
end;
end;
end.
uj5u.com熱心網友回復:
Button4通過回圈更新全部資料uj5u.com熱心網友回復:
注意表欄位中要有主鍵,我設定的主鍵是ID。uj5u.com熱心網友回復:
注意資料庫里的表格有沒有問題?如果有,
也會有此提示?
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/81155.html
標籤:數據庫相關
