2015-09-02 18 views
-4

我想在查詢中插入或附加一個查詢,該查詢具有數據庫中的默認值的列,但是在從Delphi包含寄存器時未設置此列。字段在TQuery中具有缺省值時插入或附加寄存器

我認爲在改變我的追加和插入的條款,而是我刪除了具有默認值,併爲空的字段,但我不知道這是否是簡單的方法。

我的表是:

CREATE TABLE TABLETEST( ID INTEGER NOT NULL, 領域INTEGER DEFAULT 10 );看到

我的德爾福代碼,如果是插入正確的值是:

Query1.SQL.Clear; 
Query1.SQL.Add('SELECT * FROM TableTest order by ID'); 
Query1.Open; 
Query1.Last; 
ID := Query1.FieldByName('ID').AsInteger; 

inc(ID); 
Query1.Insert; 
Query1.FieldByName('ID').AsInteger := ID; 
Query1.Post; 

inc(ID); 
Query1.Append; 
Query1.FieldByName('ID').AsInteger := ID; 
Query1.Post; 

Query1.ApplyUpdates; 
Query1.CommitUpdates; 

**查詢1在TQuery的

+0

當我做一個插入或追加查詢,並做一個職位。 –

+1

通過寄存器,我認爲你的意思是自動遞增的值。在這種情況下,你不會在你的代碼中分配一個;當INSERT完成時,數據庫會爲你分配它。根據您使用的RDBMS,通常可以在完成後從數據庫中檢索值,但我無法提供有關如何執行此操作的建議,因爲您沒有爲DBMS包含標記使用。 –

+0

@KenWhite從他的評論我相信他說的「註冊」意味着填寫插入或追加後跟一個職位,在這種情況下,他填充「ID」字段,而不是「字段」字段,但收到NULLS而不是默認價值10 –

回答

0

您還沒有指定誰是使用SQL Server中,但是作爲GabrielF說

爲火鳥當執行

插入到表(columnA,columnB)值(10,NULL)

columnB值將爲NULL無論在數據庫中默認設置爲10。

procedure TDataModule1.Newrecord(DataSet: TDataSet); 
begin 
    Query1.FieldByName('FIELD').AsInteger := 10; //SET DEFAULT 
end; 

或者,如果你想在Delphi中使用「純」 SQL(如IbExpert腳本:

要確保字段值將被默認設置,您可以爲使用TQuery的OnNewRecord事件您可以使用:

Query1.Sql.Text := 'Insert into table (ID) values (<value>)'; 
Query1.ExecSql; 

在這種情況下,字段'FIELD'中將沒有值,並且將使用默認值。

+0

但是當我執行時: 插入表(columnA)值(10) columnB的值將是默認值。 –

+0

Query1.insert將會觸發OnNewRecord事件,所以當你執行FIELD值時已經有10個了 –

+0

你也可以設置'FIELD INTEGER NOT_NULL DEFAULT 10'來測試發送到數據庫的delphi或更好的可以使用'SqlMonitor'。 –

相關問題