mfc讀取資料庫
1. MFC客戶端程序如何獲得伺服器端資料庫里的數據
有遠程直接方法資料庫的方法。大中型資料庫基本都是網路資料庫,如常見的ORACLE / MSsql / MYSQL等。
MFC編程,對這些資料庫可以直接通過ADO進行查詢和修改,常用的辦法,就是用IP地址和實例(一般為默認)作為連接字元串中的SERVER即可。
對於網路型資料庫(ACCESS、DBASE不在此列),你不需要做伺服器端程序,只需要通過資料庫支持的通訊協議和方法進行遠程操作即可。
2. mfc 如何接收mysql資料庫數據
1、最簡單的方式:
下載一個MYSQL ODBC驅動,並安裝
2、設置一個MYSQL ODBC數據源
3、MFC中調用該數據源
4、具體進行資料庫何種操作,隨意
5、更多交流可參考我空間主頁有關文章。
3. MFC從ListCtrl中讀取數據寫入資料庫中的問題
可以使用最簡易的調試方式:把參數全部去掉,一個個加入測試。何況這個是insert語句,比如先插入前兩個:no和erp品號,後面的參數全部去掉,包括插入值。如果語句編譯通過了說明前兩個參數是正確的,再增加製作數量這個參數,繼續測試,通過了這說明沒問題,沒通過則表示卡在這個參數,就要檢查語法以及參數類型包括資料庫表的類型等。要掌握這種簡易調試方式,不一定碰到問題都break/watch~
4. 如何在MFC中讀取txt文件中的數據
MFC主要讀寫文件的類是CFile,而CStdioFile類是派生自CFile類的,主要增加了一個按行的方式讀取/寫入文件每行字元串的功能
讀寫TXT文件,寫入和輸出必須統一格式
CStdioFile
myFile,
File;
if(myFile.Open(CBApp::getCurrMolePath()+_T("filename.txt"),
CFile::modeRead))
{
//讀取
myFile.ReadString(str);
myFile.Close();
}
else
{
//創建
File.Open(CBApp::getCurrMolePath()+_T("filename.txt"),
CFile::modeWrite
|
CFile::modeCreate);
File.WriteString(sFileName);
File.Close();
}
//寫入
File.Open(CBApp::getCurrMolePath()+_T("filename.txt"),
CFile::modeWrite
);
File.WriteString(sFileName);
File.Close();
5. MFC怎麼與資料庫連接,求詳細步驟!!!!!急急急!!!!!!
比如在你的工程目錄中建一個
dbf\vir.mdb
//access資料庫,然後你需要做以下操作:
1.在stadafx.h裡面添加#include
//新加入頭文件,用於cdatabase類。
2.在stadafx.h最後的#endif上添加#import
"msado15.dll"
no_namespace
rename("eof","rseof")
這時,你要把msado15.dll拷到與dbf同級的目錄,也就是工程目錄里,當然你可以該路徑
3.在你自己的工程里,比如myproc是你建的工程,添加代碼
cmyporcapp::cmyprocapp(){
coinitialize(null);
sqlconfigdatasource(null,odbc_add_dsn,
"microsoft
access
driver
(*.mdb)",\
"dsn=myimage;dbq=dbf\\vir.mdb;defaultdir=dbf");
//注冊本地資料庫數據源
m_db.openex("dsn=myimage;;",cdatabase::noodbcdialog);//myimage是數據源名稱
}
4.在前面的函數體之前創建全局變數cdatabase
m_db;
crecordset
m_rec(&m_db);
5.使用資料庫{
cstring
strsql="select
*
from
virdb";
bstr
bstrsql=strsql.allocsysstring();
m_rec.open(crecordset::dynaset,strsql);
while(!m_rec.iseof())
{
//
使用資料庫的代碼,讀出來的數據都是字元串型的
cstring
myvirable;
m_rec.getfieldvalue("欄位名",myvirable);
//將某個欄位的當前行的值讀到myvirabl中
//
......
m_rec.movenext();
//將記錄移到下一行
}
}
本程序是自動注冊數據源的,當然可以手動注冊數據源,關於如何注冊數據源並不麻煩,敘述起來不太方面,你就參考其他的吧。不過建議不用手動注冊數據源,這樣你地程序移植性不好.
6. 求問MFC 循環讀取資料庫中的表,表中欄位有NULL時出現異常,如何修改
------解決方案-------------------------------------------------------- 只能先判斷是否為NULL然後面賦值
或者是資料庫里表每個欄位的值默認為空格" ",這樣就不用判斷了,這是在設計資料庫里的表時定義的,每個欄位都有各種屬性,比如類型,大小,默認值,鍵值等屬性
------解決方案--------------------------------------------------------也可以對查詢語句進行處理,對於可能null的欄位,改寫為ISNULL(xxxx,'')...強制返回一個值
------解決方案--------------------------------------------------------"SELECT ISNULL(字串欄位名,''),...ISNULL(整數欄位名,0)... FROM 表 ..."
ISNULL 是SQL Server中的函數,在你構造的查詢語句中,由SQL伺服器進行解析,確保不會返回不好處理的空值
------解決方案--------------------------------------------------------C/C++ code _variant_t var=m_AdoConn.m_pRecordset->GetCollect("UserNo"); if(var.vt != VT_NULL) m_Grid.SetItemText(i,0,(LPCTSTR)(_bstr_t)var); else m_Grid.SetItemText(i,0,TEXT(""));
判斷他是不是NULL。是插入字元""不是就插入原值
7. MFC對話框如何讀取access資料庫
首先在stdafx.h中添加如下
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")
上面的路徑根據你自己的更改
然後在你要查詢的地方寫如下代碼:
CoInitialize(NULL);
_ConnectionPtr pConn(__uuidof(Connection));
_RecordsetPtr pRst(__uuidof(Recordset));
_CommandPtr pCmd(__uuidof(Command));
pConn->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="C:\a.mdb";
//這里的資料庫也是你的絕對路徑
pConn->Open("","","",adConnectUnspecified);
pRst = pConn->Execute("Select * from ...",NULL,adCmdText);
while(!pRst->rsEOF)
{
/*
這里寫你怎麼把數據讀取到外面,如下面是吧數據讀到一個ListB0x控制項中
((CListBox*)GetDlgItem(IDC_LIST1))->AddString((_bstr_t)pRst->GetCollect("這里寫屬性名"));
*/
pRst->MoveNext();
}
pRst->Close();
pConn->Close();
pRst.Release();
pConn.Release();
pCmd.Release();
CoUninitialize();
8. 如何用MFC從MYSQL中讀取數據
//下面的代碼是一個實現C++連接MYSQL資料庫的很好的例子
//這里用了建表,插入,檢索,刪表等常用功能
//我用VC++6.0生成,已經成功連接了。
//在VC++6.0中要想把做一下兩步准備工作才可以。
//(1)Tools->Options->Directories->Include files中添加C:\Program Files\MySQL\MySQL Server 6.0\include
//(2)Tools->Options->Directories->Library files中添加C:\Program Files\MySQL\MySQL Server 6.0\lib\opt
//其實就是將頭文件和庫文件包含進來
//我覺得這個例子寫的很好,再結合自己的試驗,特地介紹給大家!
#include <winsock.h>
#include <iostream>
#include <string>
#include <mysql.h>
using namespace std;
#pragma comment(lib, "ws2_32.lib")
#pragma comment(lib, "libmysql.lib")
//單步執行,不想單步執行就注釋掉
#define STEPBYSTEP
int main() {
cout << "****************************************" << endl;
#ifdef STEPBYSTEP
system("pause");
#endif
//必備的一個數據結構
MYSQL mydata;
//初始化資料庫
if (0 == mysql_library_init(0, NULL, NULL)) {
cout << "mysql_library_init() succeed" << endl;
} else {
cout << "mysql_library_init() failed" << endl;
return -1;
}
#ifdef STEPBYSTEP
system("pause");
#endif
//初始化數據結構
if (NULL != mysql_init(&mydata)) {
cout << "mysql_init() succeed" << endl;
} else {
cout << "mysql_init() failed" << endl;
return -1;
}
#ifdef STEPBYSTEP
system("pause");
#endif
//在連接資料庫之前,設置額外的連接選項
//可以設置的選項很多,這里設置字元集,否則無法處理中文
if (0 == mysql_options(&mydata, MYSQL_SET_CHARSET_NAME, "gbk")) {
cout << "mysql_options() succeed" << endl;
} else {
cout << "mysql_options() failed" << endl;
return -1;
}
#ifdef STEPBYSTEP
system("pause");
#endif
//連接資料庫
if (NULL
!= mysql_real_connect(&mydata, "localhost", "root", "test", "test",
3306, NULL, 0))
//這里的地址,用戶名,密碼,埠可以根據自己本地的情況更改
{
cout << "mysql_real_connect() succeed" << endl;
} else {
cout << "mysql_real_connect() failed" << endl;
return -1;
}
#ifdef STEPBYSTEP
system("pause");
#endif
//sql字元串
string sqlstr;
//創建一個表
sqlstr = "CREATE TABLE IF NOT EXISTS user_info";
sqlstr += "(";
sqlstr +=
"user_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique User ID',";
sqlstr +=
"user_name VARCHAR(100) CHARACTER SET gb2312 COLLATE gb2312_chinese_ci NULL COMMENT 'Name Of User',";
sqlstr +=
"user_second_sum INT UNSIGNED NOT NULL DEFAULT 0 COMMENT 'The Summation Of Using Time'";
sqlstr += ");";
if (0 == mysql_query(&mydata, sqlstr.c_str())) {
cout << "mysql_query() create table succeed" << endl;
} else {
cout << "mysql_query() create table failed" << endl;
mysql_close(&mydata);
return -1;
}
#ifdef STEPBYSTEP
system("pause");
#endif
//向表中插入數據
sqlstr =
"INSERT INTO user_info(user_name) VALUES('公司名稱'),('一級部門'),('二級部門'),('開發小組'),('姓名');";
if (0 == mysql_query(&mydata, sqlstr.c_str())) {
cout << "mysql_query() insert data succeed" << endl;
} else {
cout << "mysql_query() insert data failed" << endl;
mysql_close(&mydata);
return -1;
}
#ifdef STEPBYSTEP
system("pause");
#endif
//顯示剛才插入的數據
sqlstr = "SELECT user_id,user_name,user_second_sum FROM user_info";
MYSQL_RES *result = NULL;
if (0 == mysql_query(&mydata, sqlstr.c_str())) {
cout << "mysql_query() select data succeed" << endl;
//一次性取得數據集
result = mysql_store_result(&mydata);
//取得並列印行數
int rowcount = mysql_num_rows(result);
cout << "row count: " << rowcount << endl;
//取得並列印各欄位的名稱
unsigned int fieldcount = mysql_num_fields(result);
MYSQL_FIELD *field = NULL;
for (unsigned int i = 0; i < fieldcount; i++) {
field = mysql_fetch_field_direct(result, i);
cout << field->name << "\t\t";
}
cout << endl;
//列印各行
MYSQL_ROW row = NULL;
row = mysql_fetch_row(result);
while (NULL != row) {
for (int i = 0; i < fieldcount; i++) {
cout << row[i] << "\t\t";
}
cout << endl;
row = mysql_fetch_row(result);
}
} else {
cout << "mysql_query() select data failed" << endl;
mysql_close(&mydata);
return -1;
}
#ifdef STEPBYSTEP
system("pause");
#endif
//刪除剛才建的表
sqlstr = "DROP TABLE user_info";
if (0 == mysql_query(&mydata, sqlstr.c_str())) {
cout << "mysql_query() drop table succeed" << endl;
} else {
cout << "mysql_query() drop table failed" << endl;
mysql_close(&mydata);
return -1;
}
mysql_free_result(result);
mysql_close(&mydata);
mysql_server_end();
system("pause");
return 0;
}
9. MFC中怎麼在編輯框中輸出從資料庫表中讀取的信息
// txl3.cpp: 定義應用程序的類行為。
//
#include "pch.h"
#include "framework.h"
#include "txl3.h"
#include "txl3Dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// Ctxl3App
BEGIN_MESSAGE_MAP(Ctxl3App, CWinApp)
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()
// Ctxl3App 構造
Ctxl3App::Ctxl3App()
{
// 支持重新啟動管理器
m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
// TODO: 在此處添加構造代碼,
// 將所有重要的初始化放置在 InitInstance 中
}
// 唯一的 Ctxl3App 對象
Ctxl3App theApp;
// Ctxl3App 初始化
BOOL Ctxl3App::InitInstance()
{
// 如果一個運行在 Windows XP 上的應用程序清單指定要
// 使用 ComCtl32.dll 版本 6 或更高版本來啟用可視化方式,
//則需要 InitCommonControlsEx()。 否則,將無法創建窗口。
INITCOMMONCONTROLSEX InitCtrls;
InitCtrls.dwSize = sizeof(InitCtrls);
// 將它設置為包括所有要在應用程序中使用的
// 公共控制項類。
InitCtrls.dwICC = ICC_WIN95_CLASSES;
InitCommonControlsEx(&InitCtrls);
CWinApp::InitInstance();
AfxEnableControlContainer();
// 創建 shell 管理器,以防對話框包含
// 任何 shell 樹視圖控制項或 shell 列表視圖控制項。
CShellManager *pShellManager = new CShellManager;
// 激活「Windows Native」視覺管理器,以便在 MFC 控制項中啟用主題
CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
// 標准初始化
// 如果未使用這些功能並希望減小
// 最終可執行文件的大小,則應移除下列
// 不需要的特定初始化常式
// 更改用於存儲設置的注冊表項
// TODO: 應適當修改該字元串,
// 例如修改為公司或組織名
SetRegistryKey(_T("應用程序向導生成的本地應用程序"));
Ctxl3Dlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: 在此放置處理何時用
// 「確定」來關閉對話框的代碼
}
else if (nResponse == IDCANCEL)
{
// TODO: 在此放置處理何時用
// 「取消」來關閉對話框的代碼
}
else if (nResponse == -1)
{
TRACE(traceAppMsg, 0, "警告: 對話框創建失敗,應用程序將意外終止。\n");
TRACE(traceAppMsg, 0, "警告: 如果您在對話框上使用 MFC 控制項,則無法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n");
}
// 刪除上面創建的 shell 管理器。
if (pShellManager != nullptr)
{
delete pShellManager;
}
#if !defined(_AFXDLL) && !defined(_AFX_NO_MFC_CONTROLS_IN_DIALOGS)
ControlBarCleanUp();
#endif
// 由於對話框已關閉,所以將返回 FALSE 以便退出應用程序,
// 而不是啟動應用程序的消息泵。
return FALSE;
}
10. MFC從資料庫讀取ASCII的表中讀取數據
改成((LPCTSTR*)_bstr_t(theValue));試一下,
如果還是顯示亂碼,需要用WideCharToMultiByte函數將unicode字元串轉行成multi-byte字元串後,再添加到List控制項