全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1203
推到 Plurk!
推到 Facebook!

用sql新增

尚未結案
tea15
初階會員


發表:64
回覆:72
積分:27
註冊:2005-06-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-22 17:18:40 IP:211.20.xxx.xxx 未訂閱
你們好,我想請教新增的問題…程式碼如下: procedure TForm2.BitBtn1Click(Sender: TObject); begin query1.SQL.Clear; query1.SQL.Add('select *from PDLB where LBPDID'); QUERY1.ExecSQL; query1.Insert; QUERY1.Open; showmessage('新增完成'); 我試著用sql的語法,但是卻不能run…到底哪裡出了問題?
wyndog
資深會員


發表:7
回覆:362
積分:348
註冊:2004-10-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-22 18:11:15 IP:60.248.xxx.xxx 未訂閱
先 Open 再 Insert
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-22 18:13:22 IP:202.62.xxx.xxx 未訂閱
您好﹗    改成如下試試﹕
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('select * From PDLB');
  //SQL語法中有錯誤﹐修正如上
  Query1.Open;
  //使用無回傳值的SQL語法時﹐要用Open方法來開啟
  //ExecSQL是用于無回傳值的SQL語法﹐如Insert, Delete, Update等
  //當下達ExecSQL方法后資料集元件會被關閉(即Active屬性值為False)
    Query1.Insert;
  Query1.Fields.FieldByName('欄位名稱1').Value := 值
  //此處在進入Insert狀態后﹐需要指定各欄位的值
  //略﹒﹒﹒同上
  Query1.Post;
end;
最后還有一點﹐使用Query元件時﹐如果需要對資料庫進行異動﹐必須先將RequestLive屬性值設為True才可﹒ ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
tea15
初階會員


發表:64
回覆:72
積分:27
註冊:2005-06-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-23 08:30:01 IP:211.20.xxx.xxx 未訂閱
嗯~不好意思哦! 上面程式碼我試過了… 但query1.post這一行總是出錯...耶! 而在value:=值... 這個值我不清楚是什麼值耶!
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-23 08:57:47 IP:202.62.xxx.xxx 未訂閱
您好﹗    在Query1.Post;這句出錯的可能性大都是因為資料集未進入修改或新增狀態﹐賦欄位值錯誤這兩個原因﹒您的問題中﹐Query1已經處于新增狀態﹐所以應不會是第一個原因﹐在每筆資料Post之前﹐總要把每個欄位的值先告訴給資料集元件吧﹐如果沒有賦值給對應的欄位﹐如果資料表架構中該欄位是不允許空白的﹐那在Post的時候就會出錯了﹒假設說您的三個欄位﹐IDNO﹐Name﹐Age﹐IDNO和Name是字串形態﹐Age是整數形態﹐您可在Post之前寫成如下﹕
procedure TForm2.BitBtn1Click(Sender: TObject);
begin
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add('select * From PDLB');
  Query1.Open;
  Query1.Insert;
  Query1.Fields.FieldByName('IDNO').Value := '0001';
  Query1.Fields.FieldByName('Name').Value := 'Xinsheng'
  Query1.Fields.FieldByName('Age').Value := 26
  Query1.Post;
end;
================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
tea15
初階會員


發表:64
回覆:72
積分:27
註冊:2005-06-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-06-23 12:01:37 IP:211.20.xxx.xxx 未訂閱
cashxin2002你好: 是這樣的,我將你上述的程式碼改了一點點地方…如下 Query1.Close;   Query1.SQL.Clear;   Query1.SQL.Add('select * From PDLB');   Query1.Open;   Query1.Insert;   Query1.Fields.FieldByName('LBPDID').Value := DBEdit1.Text;   Query1.Fields.FieldByName('LBPRTY').Value := DBEdit2.Text;   Query1.Fields.FieldByName('LBMARKN').Value := DBEdit3.Text;   Query1.Post;    看起來並沒有什麼錯誤…但卻出現在這一個錯誤視窗…
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-06-23 12:19:32 IP:202.62.xxx.xxx 未訂閱
您好﹗    鍵值欄位值重复﹐當然就會出錯嘍﹐更改一下DBEdit1的值內容即可﹒    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
tea15
初階會員


發表:64
回覆:72
積分:27
註冊:2005-06-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-06-23 13:38:07 IP:211.20.xxx.xxx 未訂閱
cashxin2002你好: 你指的是…我在DBedit1所輸入的值與其他兩個DBedit的值一樣嗎?    但我試key過不同的值,還是出現那個錯誤訊息...
tea15
初階會員


發表:64
回覆:72
積分:27
註冊:2005-06-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-06-23 13:52:48 IP:211.20.xxx.xxx 未訂閱
不過,後來我又多增加了幾個欄位…一樣KEY不同值... 卻出現這個錯誤訊息,又代表著什麼呢?
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-06-23 14:06:55 IP:202.62.xxx.xxx 未訂閱
您好﹗    欄位形態和您輸入的值形態不匹配﹐程式碼貼上來看看﹒ 如欄位為整數形態﹐需要﹕ Query1.Fields.FieldByName('Age').Value := StrToInt(DBEdit1.Text); 如欄位為實數形態﹐需要﹕ Query1.Fields.FieldByName('Money').Value := StrToFloat(DBEdit2.Text); 如欄位為日期形態﹐需要﹕ Query1.Fields.FieldByName('Date').Value := StrToDate(DBEdit3.Text);     您需要确定都有賦值給每個欄位﹒    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
tea15
初階會員


發表:64
回覆:72
積分:27
註冊:2005-06-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-06-23 15:42:19 IP:211.20.xxx.xxx 未訂閱
Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('select * From PDLB'); Query1.Open; Query1.Insert; Query1.Fields.FieldByName('LBPDID').Value :=DBEdit1.Text; Query1.Fields.FieldByName('LBPRTY').Value :=DBEdit2.Text; Query1.Fields.FieldByName('LBMARKN').Value := DBEdit3.Text; Query1.Fields.FieldByName('LBMARKC').Value := DBEdit4.Text; Query1.Post; 恩~由於我的欄位型態大多以char及decimal 為主…所以我不知道要如何下這個程式碼耶!
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-06-23 16:23:25 IP:202.62.xxx.xxx 未訂閱
您好﹗    Char形態字段的直接使用如下的方法﹕ Query1.Fields.FieldByName('字段名稱').Value := DBEdit1.Text;    decimal形態字段的使用如下的方法﹕ Query1.Fields.FieldByName('字段名稱').Value := StrToFloat(DBEdit1.Text);    ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
ph
一般會員


發表:3
回覆:27
積分:11
註冊:2003-09-28

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-06-24 02:01:25 IP:61.229.xxx.xxx 未訂閱
Hi:    DBEDIT是資料感知的元件,user在keyin時就已經賦值了。這樣的 寫法要再貼一個UpdateSql 。Query的屬性中CachedUpdate要設成True ,Update Object要設成剛貼的那個UpdateSql。    1:在form Create時就先把Query打開
 
   procedure TForm1.FormCreate(Sender: TObject);
   begin
    UpdateSql1.InsertSQL.Clear;
    UpdateSql1.InsertSQL.Add('insert into PDLB   
                             (LBPDID,LBPRTY,LBMARKN) '
                           ' Values (:LBPDID,:LBPRTY,:LBMARKM) ');        UpdateSql1.ModifySQL.Clear;  
    UpdateSql1.ModifySQL.Add('Update  PDLB SET ' //ex LBPDID 是key
                          '  LBPRTY=:LBPRTY,
                          '  LBMARKN=:LBMARKN '
                          ' WHERE LBPDID =:OLD_LBPDID '); 
    UpdateSql1.DeleteSQL.Clear;
    UpdateSql1.DeleteSQL.Add(' Delete From PDLB '
                         ' WHERE  LBPDID=:OLD_LBPDID');        
     Query1.Close;
     Query1.
     Query1.Sql.clear;
     Query1.Sql.Add('SELECT  * from PDLB where 1=1') //選全部
     Query1.Open;       end;
2.User 按 Insert鍵時下Query.insert
    procedure TForm1.btnInsertClick(Sender: TObject);
    begin
      Query1.Insert;
    end;
3.User 按 Save鍵時下 Query.Post及ApplyUpdate
    procedure TForm1.btnSaveClick(Sender: TObject);
    begin
      Query1.Post;
      Query1.ApplyUpdates;
      Query1.CommitUpdates;        end;
或者你改用TTable 應該會更簡單 山即是我 我即是山
------
學了這麼久還是沒進步
tea15
初階會員


發表:64
回覆:72
積分:27
註冊:2005-06-15

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-06-24 09:03:41 IP:211.20.xxx.xxx 未訂閱
您好,我改了您說的那段…程式如下: Query1.Close;   Query1.SQL.Clear;   Query1.SQL.Add('select * From PDLB');   Query1.Open;   Query1.Insert;   Query1.Fields.FieldByName('LBPDID').Value :=DBEdit1.Text;   Query1.Fields.FieldByName('LBPRTY').Value :=DBEdit2.Text;   Query1.Fields.FieldByName('LBMARKN').Value := DBEdit3.Text;   Query1.Fields.FieldByName('LBMARKC').Value := DBEdit4.Text;   Query1.Fields.FieldByName('LBWQTY').Value :=StrToFloat(DBEdit5.Text);   Query1.Fields.FieldByName('LBSTUT').Value :=StrToFloat(DBEdit6.Text);   Query1.Post; 那麼出現這麼一個錯誤訊息...這是為什麼呢?
ph
一般會員


發表:3
回覆:27
積分:11
註冊:2003-09-28

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-06-24 11:18:35 IP:60.248.xxx.xxx 未訂閱
引言: Query1.Fields.FieldByName('LBWQTY').Value :=StrToFloat(DBEdit5.Text); Query1.Fields.FieldByName('LBSTUT').Value :=StrToFloat(DBEdit6.Text);
StrTofloat 函數遇到空字串時會出現錯誤 檢查DBEDIT5 及 DBEDIT6是否為空字串 或改成醬:
  
  if DBEdit5.Text <> '' then
    Query1.FieldByName'LBWQTY').Asfloat:=StrToFloat(DBEdit5.Text)
  else 
    Query1.fieldByName('LBWQTY').Asfloat:=0;
山即是我 我即是山
------
學了這麼久還是沒進步
系統時間:2024-11-22 11:36:29
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!