討論區快速選單
知識庫快速選單
討論區最近新進100則主題 程式設計俱樂部Facebook粉絲團
[ 回上頁 ] [ 討論區發言規則 ]
MFC連資料庫!
更改我的閱讀文章字型大小
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/10/6 下午 06:23:56
請問各位大大~
MFC中連結ACCESS和連結SQL的語法是否相同?
作者 : shing819(Clier) VC++曠世奇才貼文超過1000則人氣指數超過30000點
[ 貼文 1740 | 人氣 40353 | 評價 8630 | 評價/貼文 4.96 | 送出評價 84 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/10/6 下午 08:04:54
以VB的ADO的連線方式為例:

oConn.Open "Driver={Microsoft Access Driver (*.mdb)};" & _
     "Dbq=c:\somepath\mydb.mdb;"

oConn.Open "Driver={SQL Server};" & _
     "Server=MyServerName;" & _
     "Database=myDatabaseName;" & _
     "Uid=myUsername;" & _
     "Pwd=myPassword"


MFC可以考慮下列方式.
CDaoDatabase and CDaoRecordset


做資料庫功能不建議用VC,原因就是程式碼又多又長,
又難寫,不好維護,市面上我沒看過VC寫資料庫的書,
可見很少人用,Visual Fox pro可以考慮,蠻多人推薦.
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人astsj註記此篇回應為很有道理 2005/10/6 下午 11:43:09
如果是用ODBC界面的話, 存取Access和存取MS-SQL的方式都是相同的. 我看過你po的另一篇了, 以你目前對資料庫的了解程度而言, 我不太建議你直接用ODBC函數, 因為這部份比較繁雜, 要注意的東西也比較多. 或者你仔細說一下你MS-SQL的DSN是什麼? 要存取的Table名稱為何? 裡面有那些欄位是要存取的, 欄位名稱與形態是什麼? 我可以寫個sample給你參考.

ODBC DSN不知如何設, 可以請教一下同事或同學. 這部份用寫的很麻煩, 線上操作一遍就可以懂了. 但sample是應急用, 有空時最好還是仔細去看一下資料庫存取方面的書, 將基礎觀念打好, 不然只是知其然而不知其所以然, 對未來並不好.

作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/10/7 上午 12:54:26
感謝大大~
麻煩你寫個sample給我~
ODBC DSN我會設~
只是,是要設使用者資料來源還是系統資料來源?
我是主要從資料庫裡取時間來比對現在時間,時間到了自動啟動功能。
我的MS-SQL的DNS為Timedata,Table名稱為usertime
欄位有id、date、starttime、stoptime、kind。id為數字,其他都為型態都為文字。
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/10/7 上午 01:49:17
>只是,是要設使用者資料來源還是系統資料來源?

都可以. 如果是Service程式, 或是在不同使用者身份執行下都能存取, 便要設在系統資料來源 -> 比較建議這麼做.

>我的MS-SQL的DNS為Timedata,Table名稱為usertime
>欄位有id、date、starttime、stoptime、kind。id為數字,其他都為型態都為文字。

ok, 我寫個程式可以去access資料庫內容, 以字串呈現出來, 剩下請自行運用. 由於目前在家裡上網, 無法寫程式, 明天下午上班後寫完再po出來. 應該花不到十分鐘便可以了.
作者 : jasper(Jasper)討論區板主 程式設計甘苦談頂尖高手上班族的哈拉園地優秀好手貼文超過1000則人氣指數超過70000點
[ 貼文 1408 | 人氣 96053 | 評價 6990 | 評價/貼文 4.96 | 送出評價 42 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人astsj註記此篇回應為很有道理 2005/10/7 上午 08:37:54
用 MFC 開發資料庫應用程式是近來研究的重點,
我用 Google 尋找 Ado 的相關說明,
在簡體的網站上有很多的資料,
你可以自行參考。

VC中利用ADO共同實現數據庫的操作
http://www.evget.com/articles/evget_1063.html

在 Visual C++ 中用 Ado 進行數據庫編程
http://www.yesky.com/20020320/1602630.shtml

Ado 第一次親密接觸 -- Ado 開發實踐之一
http://copathway.com/itbookreview/view_paper.asp?paper_id=1364
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/10/7 下午 02:35:15
不好意思~
青杉大大~
可不可寫連到SQL SERVER的?
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人astsj註記此篇回應為最佳解答 2005/10/7 下午 03:16:31
程式如下, 主要使用CDatabase/CRecordset, 算是蠻簡單的 (處理MS-SQL或Access都一樣). 錯誤處理與資料取出後的處理, 請自行加入. 記得在最前面加上#include <afxdb.h>


CDatabase db;
if (!db.OpenEx("DSN=Timedata;UID=;PWD=",CDatabase::noOdbcDialog | CDatabase::openReadOnly))
{
// 無法連線資料庫 //
return;
}
CRecordset rs(&db);
const char* sql = "select id,date,starttime,stoptime,kind from usertime";
if (rs.Open(CRecordset::forwardOnly,sql))
{
int field_no = rs.GetODBCFieldCount();
while (!rs.IsEOF())
{
for (int i=0; i<field_no; i++)
{
CString data;
rs.GetFieldValue(i,data);
MessageBox(data); // 這裡看你如何處理資料 //
}
rs.MoveNext();
}
rs.Close();
}
else
{
// 無法執行SQL //
}
db.Close();


作者 : jose(強強)
[ 貼文 102 | 人氣 8899 | 評價 0 | 評價/貼文 0 | 送出評價 35 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/10/7 下午 03:38:08

>不好意思~
>青杉大大~
>可不可寫連到SQL SERVER的?
如果是用ODBC界面的話, 存取Access和存取MS-SQL的方式都是相同的
不好意思,引用青衫大大的話,要看仔細哦~~
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/10/7 下午 03:39:13
忘了說明一點, 如果連線MS-SQL時需要username/password, 記得填到UID和PWD裡.
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/10/8 上午 12:17:43
非常感謝青杉大大~
可否請青杉大大再教一下以下語法的功能~
db.OpenEx //這個與db.Open有什麼不一樣丫?
rs.IsEOF//這個是...?
rs.Open(CRecordset::forwardOnly,sql)括號中的是?
rs.GetODBCFieldCount();這是取ODBC檔案的內容嗎?
rs.GetFieldValue(i,data);這是取檔案的值?
rs.MoveNext();這是....?

作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/10/8 上午 06:05:23
>db.OpenEx //這個與db.Open有什麼不一樣丫?
>rs.IsEOF//這個是...?
>rs.Open(CRecordset::forwardOnly,sql)括號中的是?
>rs.GetODBCFieldCount();這是取ODBC檔案的內容嗎?
>rs.GetFieldValue(i,data);這是取檔案的值?
>rs.MoveNext();這是....?

我會覺得你太不用心了... 這些函數, 只要你去看一下MSDN, 不管是從Google去查, 其實都有說明, 除非你英文非常的poor, 但若如此, 你在資訊業裡存活的機率就太低了... 我就任第一件事就是, 只要英文程度無法去吸吸新知的人, 一概out. 當然這是為了企業獲利. 我希望你至少要有點程度. 我是非常願意教, 但問題是, 我不喜歡教看書就知道的東西. 我已經跟你說過多少次該學些什麼, 去看那類的書, 如果你真的去看過, 應該就不會再問這些東西了.

我帶下屬是非常嚴的, 做不來就只有走人. 但學習知識, 我永遠開啟大門, 但我不會教全部, 只有提到重點. 學不學就看個人. 不懂的來問我, 我會不厭其煩地教, 最恨的是明明說了, 應該看那方面的書, 但最後卻不去學, 白白浪費我的時間.

就我教過的人裡, 大陸人因為書少, 所以學得很勤, 每天一堆人來問我. 但在國內, 唉... 大家只在乎今天要去約會, 沒時間... 主動地拿一本書讓他好好唸唸, 兩個月才說根本沒翻過. 這又要叫我怎麼說呢... 要薪水高, 首要的是以全世界為戰場, 拼得過全世界的人才算是厲害, 但太多人只以台灣為基準, 難怪一年不如一年...

也許是我說得太多了, 但就我在這個討論區裡回覆的狀況而言, 似乎大家有點太弱了. 以前在大陸工作時, 一直認為台灣強的地方在於資訊發達, 懂得多, 但若以技術生根而言, 差距似乎逐年擴大. 為何大家不能努力地去擴展自己的能力範圍? 要知道, 正當我們在玩樂時, 別人卻在努力地學習新知識... 連我這種老鳥也不得不常在看新東西, 那麼平常只是玩玩性質的人又算什麼?!

也許是我醉了, 也許是我對政府沒有支援軟體產業政策的不滿, 但無論如何, 厚植實力永遠是對個人最好的方法. 我也一直往教導以後人才為目標, 但大家不想學, 自甘墮落, 那我也沒辦法了...

sorry, 有些事已經不單是針對你而論了. 抱歉.
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/10/9 上午 12:07:41
不好意思~青杉大大
讓您動氣了...
小弟有去找書,只是有些函式沒有介召...
像是....rs.Open(CRecordset::forwardOnly,sql)中的CRecordset::forwardOnly
>rs.GetODBCFieldCount();
>rs.GetFieldValue(i,data);
我的英文真的很poor,msdn看的不是很懂,才想說要請教你....
讓自己能更懂~
讓您生氣,小弟深感抱歉!!
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人astsj註記此篇回應為最佳解答 2005/10/9 下午 03:31:48
>小弟有去找書,只是有些函式沒有介召...
>像是....rs.Open(CRecordset::forwardOnly,sql)中的CRecordset::forwardOnly
>>rs.GetODBCFieldCount();
>>rs.GetFieldValue(i,data);
>我的英文真的很poor,msdn看的不是很懂,才想說要請教你....

英文不好, 真的要練練. 可以試著用線上字典將不懂的字標出來, 慢慢了解每個句子的意思. 久了就慢慢上手了. 很多的第一手資料都是英文的, 要等到中譯本出來, 時效上就差太多. 除了得到資訊的速度比較慢外, 也可能不夠完整.

db.OpenEx //這個與db.Open有什麼不一樣丫?

OpenEx是直接使用"DSN=...;UID=...;PWD=..."的表示式來開啟資料庫, 當然你也可以用Open來開啟.

rs.IsEOF//這個是...?

檢查是否沒有下一筆record了.

rs.Open(CRecordset::forwardOnly,sql)括號中的是?

forwardOnly是指只做單一方向存取, 也就是取了下一筆便不能回到上一筆了.

rs.GetODBCFieldCount();這是取ODBC檔案的內容嗎?

這是取欄位數目

rs.GetFieldValue(i,data);這是取檔案的值?

這是取每個欄位的內容

rs.MoveNext();這是....?

移到下一筆record


>讓您生氣,小弟深感抱歉!!

有時喝醉酒, 會將一些平常積壓的不滿一下子爆發出來, 有時並非原po的關係. so寫到後來自己也感覺到了, 才會說聲抱歉. 我常這樣, 習慣就好.
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/10/10 上午 11:08:34
謝謝青杉大大~
您用的select和一般的select用法不太一樣~
想再請教你一下~
如果要加入條件式是變這樣嗎?
const char* sql = 'select id,date,starttime,stoptime,kind from usertime where id=XX';
另外xx可以是程式中的變數嗎?
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人astsj註記此篇回應為最佳解答 2005/10/10 下午 02:48:18
>如果要加入條件式是變這樣嗎?
>const char* sql = ''select id,date,starttime,stoptime,kind from usertime where id=XX'';
>另外xx可以是程式中的變數嗎?

寫法是對的. 如果要將動態的變數資料填入SQL語句中, 可以利用sprintf, 例如:

char sql[256];
int id = 1;
sprintf(sql,"select id,date,starttime,stoptime,kind from usertime where id=%d",id);

當然, 你宣告的字串空間要足夠大. 如果無法預期有多大, 那麼用CString來動態組合也可以.
作者 : xwlin(XWLin) 人氣指數超過10000點
[ 貼文 147 | 人氣 20298 | 評價 430 | 評價/貼文 2.93 | 送出評價 3 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/10/10 下午 09:59:52
以下這個網站可以查到各種ODBC的資料庫連線字串。

http://www.connectionstrings.com/

作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/10/12 上午 12:11:06
謝謝青杉大大~
有沒有函數是可以一次取一整列的資料?
用這個嗎?
GetRowsFetched
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人astsj註記此篇回應為最佳解答 2005/10/12 下午 03:06:16
>有沒有函數是可以一次取一整列的資料?

沒有. 其實CRecordset一次就是讀取一個以上的記錄, 外界在使用時都是指定要那個欄位的資料.

>GetRowsFetched

這是指目前CRecordset在fetch時所取得的資料記錄數目, 必須配合SetRowsetSize, 不過一般用不著.
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/10/14 下午 12:50:10
青杉大大~
再請教一下~

如果條件式有兩個是否為這樣用?
char sql[256];
int id = 1;
char kind="m";
sprintf(sql,"select id,date,starttime,stoptime,kind from usertime where id=%d,id and kind=%d,kind);
 
還有就是如果我的資料表多了個check欄
當我使用完該筆資料時就讓check="1";
把rs.SetFieldValue(i,"1");設在for迴圈外,while迴圈裡這樣會出錯。
是不是('DSN=Timedata;UID=;PWD=',CDatabase::noOdbcDialog | CDatabase::openReadOnly))裡的openReadOnly要改丫?那要改成什麼才會能讀能寫丫?

作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/10/29 上午 12:30:22
請教大大們~

>
如果我的資料表多了個check欄
>當我使用完該筆資料時就讓check='1';
>把rs.SetFieldValue(i,'1');設在for迴圈外,while迴圈裡這樣會出錯。
>是不是(''DSN=Timedata;UID=;PWD='',CDatabase::noOdbcDialog | CDatabase::openReadOnly))裡的openReadOnly要改丫?那要改成什麼才會能讀能寫丫?


作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人astsj註記此篇回應為最佳解答 2005/11/2 下午 10:10:23
要更動資料庫記錄欄位值, 先呼叫rs.Edit, 然後用rs.SetFieldValue將值設進去, 再呼叫rs.Update. 當然, 你開啟資料庫時, 要將CDatabase::openReadOnly拿掉, 不然寫不回去.

我自己大都是直接用SQL的update命令, 幾乎很少用CRecordSet, 因此你可能要自行試試.
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/15 下午 10:53:24
.那如果要用SQL的update命令,要如何使用、要放哪?
update timedata set check=1 where .....
可以放在這裡面嗎?

if (rs.Open(CRecordset::forwardOnly,sql))//只往下取資料
{
int field_no = rs.GetODBCFieldCount();//取欄位數

while (!rs.IsEOF())//查檢是否有下一筆資料
{
for (int i=0; i<field_no; i++)
{
rs.GetFieldValue(i,value);//取每個欄位的內容
update timedata set check=1 where .....
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/15 下午 11:16:53
既然要用CRecordSet, 不妨就全用吧. 我是都直接用ODBC的, 因此無法確認兩者是否有衝突. 當然你也可以在該處直接執行sql命令看看 (換另一個CRecordSet物件).
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/17 下午 07:18:23
請問大大,更新"這樣寫對嗎"?

CDatabase dbb;
if (!dbb.OpenEx("DSN=Timedata;UID=happy;PWD=0000",
CDatabase::noOdbcDialog ))
{
return;
}
CRecordset rs(&dbb);

const char* sqll = "select check From content ";
if (rs.Open(CRecordset::openExclsive,sqll))
{
rs.Edit();
rs.SetFieldValue(1,check);
rs.Update();

}
rs.close();
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人astsj註記此篇回應為最佳解答 2005/11/17 下午 08:40:03
仔細看了一下CRecordset, 發現要更新還挺麻煩的. 不過直接執行SQL, 反而比較簡單一些.

>CDatabase dbb;
> if (!dbb.OpenEx('DSN=Timedata;UID=happy;PWD=0000',
> CDatabase::noOdbcDialog ))
> {
> return;
> }
> CRecordset rs(&dbb);
>
> const char* sqll = 'select check From content ';
> if (rs.Open(CRecordset::openExclsive,sqll))
> {


這裡可以直接執行:

dbb.ExecuteSQL("update content set check=1 where ... (看是什麼條件)");

因此讀取的方式可以跟以前寫的範例相同, 當需要更新時, 直接在迴圈內執行上面的SQL便可以了. (注意db不要用唯讀方式開啟即可)


> }
> rs.close();
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/18 下午 03:04:48
if (!db.OpenEx("DSN=Timedata;UID=happy;PWD=0000",
CDatabase::noOdbcDialog | CDatabase::openReadOnly))
--------------------------------------------------------------------------------
if (rs.Open(CRecordset::forwardOnly,sql))
-------------------------------------------------------------------------------
請問大大是把 CDatabase::openReadOnly和CRecordset::forwardOnly都拿掉就好,還是要改成別的?還有就是update的where是寫a=b還是a=%d,b?

作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/18 下午 03:30:11
>if (!db.OpenEx('DSN=Timedata;UID=happy;PWD=0000',
> CDatabase::noOdbcDialog | CDatabase::openReadOnly))
>--------------------------------------------------------------------------------
>if (rs.Open(CRecordset::forwardOnly,sql))
>-------------------------------------------------------------------------------
>請問大大是把 CDatabase::openReadOnly和CRecordset::forwardOnly都拿掉就好,還是要改成別的?

將openReadOnly拿掉即可. 至於CRecordSet和另外執行的sql語句無關, 因此照原來的就可以.

>還有就是update的where是寫a=b還是a=%d,b?

你的b是變數嗎? 那麼用:

sprintf(s,".... where a=%d",b);

前面...的字串自己補進去. s的話可以宣告大一點, 以免大小不夠, 例如:

char s[1024];
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/19 上午 10:35:26
那這樣對嗎?把db.ExecuteSQL("update content set check=1 where edatetime=%d,ldatetime");加在rs.MoveNext();前!!



CDatabase db;
if (!db.OpenEx("DSN=Timedata;UID=;PWD=",CDatabase::noOdbcDialog ))
{
// 無法連線資料庫 //
return;
}
CRecordset rs(&db);
const char* sql = "select id,date,starttime,stoptime,kind from usertime";
if (rs.Open(CRecordset::forwardOnly,sql))
{
int field_no = rs.GetODBCFieldCount();
while (!rs.IsEOF())
{
for (int i=0; i<field_no; i++)
{
CString data;
rs.GetFieldValue(i,data);
MessageBox(data); // 這裡看你如何處理資料 //
}


//edatetime為資料庫欄位;ldatetime為程式變數的話~//
db.ExecuteSQL("update content set check=1 where edatetime=%d,ldatetime");

rs.MoveNext();
}
rs.Close();
}
else
{
// 無法執行SQL //
}
db.Close();

作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人astsj註記此篇回應為最佳解答 2005/11/19 下午 02:08:03
>那這樣對嗎?把db.ExecuteSQL('update content set check=1 where edatetime=%d,ldatetime');加在rs.MoveNext();前!!

可以. 不過你的sql語句不太對吧?

char s[1024];
sprintf(s,"update content set check=1 where edatetime=%d",ldatetime);
db.ExecuteSQL(s);

應該是像這樣子. 你的C語言基礎很弱喔, 要加強一些.
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/21 下午 03:43:35
青杉大大~
下面這樣的寫法會出現runtime error耶!
怎麼會這樣?
select和update不同時用同個資料表嗎?


>CDatabase db;
>if (!db.OpenEx('DSN=Timedata;UID=;PWD=',CDatabase::noOdbcDialog ))
>{
>return;
>}
>CRecordset rs(&db);
>const char* sql = 'select id,date,starttime,stoptime,kind from usertime';
>if (rs.Open(CRecordset::forwardOnly,sql))
>{
>int field_no = rs.GetODBCFieldCount();
>while (!rs.IsEOF())
>{
>for (int i=0; i<field_no; i++)
>{
>CString data;
>rs.GetFieldValue(i,data);
>MessageBox(data); // 這裡看你如何處理資料 //
>}
>
>
>//edatetime為資料庫欄位;ldatetime為程式變數的話~//
>char s[1024];
sprintf(s,"update usertime set check=1 where stoptime=%d",ldatetime);
db.ExecuteSQL(s);

>rs.MoveNext();
>}
>rs.Close();
>}
>else
>{
>// 無法執行SQL //
>}
>db.Close();
>
>
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/21 下午 04:30:18
>下面這樣的寫法會出現runtime error耶!

請將runtime error是出在那個statement, 什麼樣的錯誤說清楚, 不然無法找問題.

你的寫法我試過了, 可以執行沒問題.
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/23 下午 01:47:07
以下是我實際寫的程式,麻煩大大看看哪裡寫錯了~
我把db.ExecuteSQL(s);拿掉就不會出現runtime error~


void CCaptureDlg::db()//資料庫讀取
{
CDatabase db;
if (!db.OpenEx("DSN=Timedata;UID=happy;PWD=0000",
CDatabase::noOdbcDialog ))
{
return;
}
CRecordset rs(&db);

CString sdatetime,edatetime,value,start,
end,temp,usersetfilename,path,deletedate,setfilename;

const char* sql = "select pdate,stime,etime,path,schedule_name,ddate From content ";
if (rs.Open(CRecordset::forwardOnly,sql))//只往下取資料
{
int field_no = rs.GetODBCFieldCount();//取欄位數

while (!rs.IsEOF())//查檢是否有下一筆資料
{
for (int i=0; i<field_no; i++)
{
rs.GetFieldValue(i,value);//取每個欄位的內容
if( i == 0 )//取日期
{
sdatetime=value;
edatetime=value;
}else if ( i == 1 )//取開始時間
start=value;
else if ( i == 2 )//取結束時間
end=value;
else if (i==3)
path=value;
else if ( i==4 )//取檔名
{
usersetfilename=value;
usersetfilename.TrimRight();//刪除字串右邊空白
}
else if ( i == 5)//取刪除日期
deletedate=value;
}
usersetfilename=path+usersetfilename;
SetDlgItemText(IDC_MPEG_FILE_NAME,usersetfilename);
SetDlgItemText(IDC_EDIT2,start);//顯示開始時間
SetDlgItemText(IDC_EDIT3,end);//顯示結束時間
     sdatetime+=start;
edatetime+=end;
if(strcmp(sdatetime,ldatetime) == 0 )//比對時間
{
Onstart();//執行開始功能
}
     if(strcmp(edatetime,ldatetime)==0)//比對時間
{
Onstop();//執行結束功能
char s[1024];
sprintf(s,"Update content set card=1 where edatetime=%d",ldatetime);
db.ExecuteSQL(s);
}
if(strcmp(deletedate,ldate)==0)//比對時間
DeleteFile(usersetfilename);
rs.MoveNext();//移到下一筆
}
rs.Close();
}
db.Close();
}
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/23 下午 02:49:28
> sprintf(s,'Update content set card=1 where edatetime=%d',ldatetime);

改成:

sprintf(s,"Update content set card=1 where edatetime=%s",(char*)ldatetime);

再試看看吧. 其他部份看起來似乎沒有什麼問題.
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/23 下午 03:36:48
在compile時就會出錯~
error C2440: 'type cast' : cannot convert from 'class CString' to 'char *'
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/23 下午 04:53:38
大大~
我發現問題所在了~
只要我用動態條件式~
他就是出現問題~
用靜態的就不會~
sprintf(s,"Update content set card=55 where etime=1537");
可是我又非得要用動態條件式耶~
不知大大知不知道在條件式部分還有別的寫法?
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/23 下午 05:27:45
>在compile時就會出錯~
>error C2440: ''type cast'' : cannot convert from ''class CString'' to ''char *''

喔... 疏忽了. 改用 (const char*)
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/23 下午 06:28:03
大大~
還是一樣會出現runtime error~
會是因為我的ldatetime是宣告為CString的關係嗎?~
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/23 下午 07:33:45
>還是一樣會出現runtime error~
>會是因為我的ldatetime是宣告為CString的關係嗎?~

請說明什麼樣的runtime error, 不然真的幫不上忙.

CString應該是沒關係.
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/23 下午 09:25:20
出現的訊息視窗上顯示
abnormai program termination
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/23 下午 10:22:00
>出現的訊息視窗上顯示
>abnormai program termination

這就難查了... -_-|||

查看一下sprintf(s,"...") 最後出來的字串是什麼.
不然改成:

CString s = "Update content set card=1 where edatetime=" + ldatetime;

一定有什麼地方弄壞了... 試著用debug mode來trace看看.
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/23 下午 10:42:53

>
>查看一下sprintf(s,'...') 最後出來的字串是什麼.
>
>這要看什麼字串?


>
>一定有什麼地方弄壞了... 試著用debug mode來trace看看.

可是我用靜態條件的方式寫都不會出錯耶~
而用成動態條件就會runtime error~

作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/23 下午 11:06:18
順便請問一下大大~
條件有兩個的話怎麼寫?
sprintf(s,'update content set card=1 where edatetime=%s,ldatetime and filenmae=%d,usersetfilenaem')???
>
>CString s = 'Update content set card=1 where edatetime=' + ldatetime and filenmae=%d,usersetfilenaem;??
>

作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/28 上午 11:15:52
哦哦~~~~~~
都沒有大大知道條件有兩個的話要怎麼寫嗎?

>sprintf(s,''update content set card=1 where edatetime=%s,ldatetime and filenmae=%d,usersetfilenaem'')???
>>
>>CString s = ''Update content set card=1 where edatetime='' + ldatetime and filenmae=%d,usersetfilenaem;??
>>
>
>
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
主題發起人astsj註記此篇回應為最佳解答 2005/11/28 下午 01:32:44
>>sprintf(s,''''update content set card=1 where edatetime=%s,ldatetime and filenmae=%d,usersetfilenaem'''')???
>>>
>>>CString s = ''''Update content set card=1 where edatetime='''' + ldatetime and filenmae=%d,usersetfilenaem;??

用sprintf:

sprintf(s,''update content set card=1 where edatetime=%s and filenmae=%s",ldatetime,usersetfilenaem);

用CString:

CString s = ''update content set card=1 where edatetime=";
s = s + ldatetime + " and filename=" + usersetfilename;

這些都是很基本的C++語法. 至於你出現的runtime error問題, 旁人已幫不了你了, 只能靠你自行去除錯. 有可能是別的地方出問題, 導致當死在裡面. 原來程式的寫法, 基本上是沒有問題的.
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/30 下午 07:30:53
大大~
我在執行的時候會有個問題
在資料表中間部分的資料,當程式要寫入ccheck都會出現runtime error~
而在資料表的最後一筆資料,則不會出現問題,可以把值寫入~
請問大大會知道這是哪個部分沒寫好嗎?
ccheck的型態是int!

>sprintf(s,''''update content set ccheck=1 where edatetime=%s and filenmae=%s',ldatetime,usersetfilenaem);
>
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/11/30 下午 08:09:44
你弄個access的mdb檔, 符合你MS-SQL的table格式, 填入測試用的資料, 再執行看看. 如果出現相同問題, 便把程式連同那個mdb檔mail給我看看. 單就這樣說明, 實在很難弄清問題在那裡.

cin@webgenie.com.tw
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/12/1 下午 06:45:20
大大~
我試過access了
我發現~語法有一點差異~
這是access才能的run~而sql server則不能~
sprintf(s,"Update content set ccheck=1 where stime='%s' and pdate='%s'",checktime,checkdate);

而差異就在「'%S'」~
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/12/2 下午 03:21:00
大大~
我找到原因了~
db.ExecuteSQL(s);
會出現例外~
會出現「這個連線正忙錄於另一hstmt結果」的訊息
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/12/2 下午 03:24:27
不知大大~
對於「這個連線正忙錄於另一hstmt結果」
可有解決方法???
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/12/2 下午 04:40:10
那麼試試用另一個CDatabase, 重新連線來執行SQL.
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/12/2 下午 07:12:32
大大~
不知還有沒有別的連資料庫的方法~
可教我~
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/12/4 下午 03:59:06
謝謝大大~
我後來仔細思考大大的建議後~
我恍然大悟~
用另個寫就不會出錯了~
謝謝大大~
作者 : chiuinan2(青衫)討論區板主 Visual C++ .NET卓越專家VC++一代宗師Visual Basic優秀好手資訊類作業求救卓越專家一般曠世奇才程式設計甘苦談優秀好手C++ Builder優秀好手上班族的哈拉園地優秀好手C++頂尖高手Assembly優秀好手貼文超過3000則人氣指數超過150000點
[ 貼文 3732 | 人氣 170106 | 評價 34520 | 評價/貼文 9.25 | 送出評價 125 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/12/5 上午 01:30:43
從提問與回覆的過程中, 我覺得你對C++語言本身並非十分熟練, 甚至應該只算是初學者的程度. 如果你想再更進一層樓的話, 最好痛下心力, 將C++學好. 之後如果是要處理資料庫的東西, 最好也再找本書仔細的看看, 尤其是最基礎的ODBC, 最好能弄熟 (CDatabase/CRecordSet的基礎, 都是ODBC).

我個人是很少去用MFC的CDatabase與CRecordSet, 主要因為我除了Windows外, 還要兼顧到其他的Unix系統, 不過ODBC在某些方面的處理, 需要視資料庫系統而定. 這點等你真的學好ODBC基礎概念之後, 再來談談. 以你目前的程度, 講了也是白講. 等你通過前面兩個關卡 (C++與ODBC), 我會很樂意分享我的經驗的.

題外話, 如果你只是要在Windows上處理資料庫, 那麼用VB或許還比較簡單一些. C++比較偏向低階語言, 處理起來需要考慮的東西會比較多, 學起來當然就比較繁複.
作者 : astsj(as)
[ 貼文 48 | 人氣 6247 | 評價 0 | 評價/貼文 0 | 送出評價 7 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2005/12/20 下午 04:44:08
想再請教一下大大~
delete和insert的語法要怎麼寫~
一樣用ExecuteSQL()嗎?
作者 : rogan321(POPO)
[ 貼文 54 | 人氣 1131 | 評價 60 | 評價/貼文 1.11 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/5/19 上午 11:27:35
以這傢伙的學習態度~~應該被Fire掉了吧................
作者 : h80053(cyc)
[ 貼文 1 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2006/6/12 下午 08:59:56
MFC輸入怎麼用??

只會SetDlgItemInt

謝謝
作者 : peacecorner(和平角落)
[ 貼文 23 | 人氣 3511 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/6/8 下午 05:35:47
因為我之前也對於MFC怎樣連結ACCESS有興趣
K了2~3本書之後(因為要上班,前後加起來快3個月)
自己寫了一個CALSS
可以開啟、關閉、新增、修改、刪除
不過沒有做搜尋、排序
是使用CDaodatabase以及CDaoRecordset
礙於篇幅沒辦法把全部的程式把PO上來
所以只有PO標頭檔
有興趣的人可以聯絡我
我會把檔案給你
peacecorner724@yahoo.com.tw

//Dao.h
#include "afxdao.h"
#include "afxdb.h"

class Dao
{
public:
bool Delete();
bool Updata();
bool Addnew();
bool Edit();
bool SetFieldValue(CString Title,int DataType);
bool Last();
bool First();
bool Prev();
bool Next();
void ChangVARIANT(VARIANT m_variant);
COleVariant GetFieldValue(CString Title);
bool CloseRecordSet();
bool OpenRecordSet(CString List_Name);
bool CloseDatabase();
bool OpenDatabase(CString DB_Name);
Dao();
~Dao();
CString m_CString;
COleDateTime m_date;
long m_long;
COleCurrency m_Currency;
private:
CDaoDatabase *m_pDB;
CDaoRecordset *m_pRS;
};
作者 : xinu(xinu)
[ 貼文 8 | 人氣 1008 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/6/10 下午 01:09:07
你好! 可以寄給我嗎? 謝謝!
xinuho@xuite.net

>因為我之前也對於MFC怎樣連結ACCESS有興趣
>K了2~3本書之後(因為要上班,前後加起來快3個月)
>自己寫了一個CALSS
>可以開啟、關閉、新增、修改、刪除
>不過沒有做搜尋、排序
>是使用CDaodatabase以及CDaoRecordset
>礙於篇幅沒辦法把全部的程式把PO上來
>所以只有PO標頭檔
>有興趣的人可以聯絡我
>我會把檔案給你
作者 : fromak(小憲) 貼文超過200則人氣指數超過50000點
[ 貼文 281 | 人氣 53702 | 評價 20 | 評價/貼文 0.07 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/6/12 上午 10:19:21
peacecorner(和平角落)大大你好!

小弟最近也遇到資料庫問題,不知要如下手,
如果可以的話請寄給我, 謝謝!
acqc@pchome.com.tw
作者 : fromak(小憲) 貼文超過200則人氣指數超過50000點
[ 貼文 281 | 人氣 53702 | 評價 20 | 評價/貼文 0.07 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/6/14 上午 09:06:21
peacecorner(和平角落)大大你好!

你寄的程式我已收到,謝謝

但無法RUN,也沒出現什麼訊息

整個程式,就停留在Compile視窗上

我在猜想是不是Microsoft Office 版本問題

我用的Microsoft Office 2003

謝謝
作者 : peacecorner(和平角落)
[ 貼文 23 | 人氣 3511 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/6/14 上午 11:14:11
我的程式是用6.0寫的
基本上2003應該也可以用
不過因為我手邊只有2005
所以我只能拿2005來測試一下

測試的結果2005可以完成編譯
雖然有些warning
不過動作都還算正常

至於2003的問題請恕我沒有辦法幫助你
作者 : peacecorner(和平角落)
[ 貼文 23 | 人氣 3511 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/6/14 上午 11:14:21
我的程式是用6.0寫的
基本上2003應該也可以用
不過因為我手邊只有2005
所以我只能拿2005來測試一下

測試的結果2005可以完成編譯
雖然有些warning
不過動作都還算正常

至於2003的問題請恕我沒有辦法幫助你
作者 : fromak(小憲) 貼文超過200則人氣指數超過50000點
[ 貼文 281 | 人氣 53702 | 評價 20 | 評價/貼文 0.07 | 送出評價 1 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2007/6/15 上午 09:58:43
peacecorner(和平角落)大大:

謝謝大大的大力相助,小弟再試試看
作者 : miou19890124(妙)
[ 貼文 3 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/7/12 下午 09:47:14
peacecorner(和平角落)大大您好

雖然時間有點久了,但不知道是否還有相關的MFC程式可以提供參考。

謝謝。

作者 : miou19890124(妙)
[ 貼文 3 | 人氣 0 | 評價 0 | 評價/貼文 0 | 送出評價 0 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2010/7/12 下午 09:47:29
peacecorner(和平角落)大大您好

雖然時間有點久了,但不知道是否還有相關的MFC程式可以提供參考。

謝謝。

 板主 : 青衫 , Raymond
 > Visual C++ - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - Visual C++ - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
Visual C++
1 青衫 11070 
2 Raymond 10090 
3 Clier 7630 
4 小約翰 2500 
5 Cog 2030 
6 coco 1870 
7 aming 1410 
8 牧童哥 1400 
9 r2109 1380 
10 Akira 1350 
Visual C++
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.453125