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

字串回存時加 ' 符號

尚未結案
alvin2004
一般會員


發表:7
回覆:9
積分:3
註冊:2004-08-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-14 16:55:42 IP:211.21.xxx.xxx 未訂閱
請教各位先進: 我有一段寫入資料庫程式如下: ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add("update xx set x1 = '" Edit4->Text "'"); ADOQuery1->SQL->Add("where x2 ='" Edit1->Text "'"); ADOQuery1->Prepared = true; ADOQuery1->ExecSQL(); Edit4->Text的值為--> kkk' 問題是只要有加 ' 存檔就會出現error,有辦法字串回存時加 ' 符號嗎?謝謝!!
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-14 17:32:07 IP:163.28.xxx.xxx 未訂閱
Hello alvin2004,    請把'符號拿掉看看. 另外,請參考底下程式碼:
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("update DData set Currents =" Edit1->Text);
ADOQuery1->SQL->Add("where Currents =" Edit4->Text);
ADOQuery1->Prepared = true;
ADOQuery1->ExecSQL();
引言: 可是存入的字串可能是有含'符號譬如-->kkk' 也可能是不含譬如-->kkk 那遇到不含的話,可能就不行了.
Sorry,上述field是以數字來儲存. 如果是文字的話,請用下列方式:
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("update DData set Currents =\"" Edit1->Text "\"");
ADOQuery1->SQL->Add("where Currents =\"" Edit4->Text "\"");
ADOQuery1->Prepared = true;
ADOQuery1->ExecSQL();
發表人 - nlj859 於 2004/10/14 18:17:01
alvin2004
一般會員


發表:7
回覆:9
積分:3
註冊:2004-08-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-14 17:51:04 IP:211.21.xxx.xxx 未訂閱
nlj859 您好: 可是存入的字串可能是有含'符號譬如-->kkk' 也可能是不含譬如-->kkk 那遇到不含的話,可能就不行了.
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-14 18:55:43 IP:221.169.xxx.xxx 未訂閱
alvin2004:我剛開始使用PGSQL時我還異想天開的使用中文欄位,
為此我付出很大代價(因為它連中文存入欄位都有問題)!
但我也解決了一寫問題就是存檔時用自寫函數先檢查修正一遍!
ADOQuery1->SQL->Add("update xx set x1 = '" Chk_Code( Edit4->Text)  "'");
//
/* 輸入資料中若含有 92:\ 34:" 39:' 前加92:\ */
//
AnsiString Chk_Code(AnsiString Str)
{
  AnsiString ret="";
  int j=Str.Length();
  int k;
  for(int i=1;i<=j;i  )  {
    k=(int) Str[i];
    if ( k == 92 || k == 34 || k == 39)
      ret =(char) 92;
    ret =Str[i];
  }
  return (ret);
}    其實上述函數是用於檢查中文第二碼是否屬於92:\ 34:" 39:'
若是第二碼前加92:我使用的原函數為:
//
/* 輸入資料中中文若含有 92:\ 34:" 39:' 前加92:\ */
//
AnsiString Chk_CNCode(AnsiString Str)
{
  AnsiString ret="";
  int j=Str.Length();
  int k;
  for(int i=1;i<=j;i  )  {
    ret =Str[i];
    if(Str[i]<0) {  //如果小于0為中文
      if ( i < j )   {
        i  ;
        k=(int) Str[i]; //第二字節
        if ( k == 92 || k == 34 || k == 39)
          ret =(char) 92;
        ret =Str[i];
      }
    }
  }
  return (ret);
}
請參考!
Andy Chang
------
Andy Chang
alvin2004
一般會員


發表:7
回覆:9
積分:3
註冊:2004-08-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-15 11:34:35 IP:211.21.xxx.xxx 未訂閱
andychang1690兄 妳好: 問題已ok,謝謝您不吝指導!!
alvin2004
一般會員


發表:7
回覆:9
積分:3
註冊:2004-08-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-15 11:37:38 IP:211.21.xxx.xxx 未訂閱
nlj859 您好: 問題已ok,謝謝您的幫忙!!
系統時間:2024-04-29 10:54:42
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!