1. 用java讀取一個軟體已經獲取到的數據
java都是通過流讀取數據,這個問題首先你得告訴大家VC讀取的數據存放在哪了,然後大家才能幫組你,希望把問題補全
VC獲取數據不了解,給你提供下java從流里讀取數據,看你能不能用上
如果VC可以將數據通過socket寫到輸出流里,那麼下面的代碼就能用上了
Socket client=new Socket(ip,port);//和VC讀取數據的ip連接上
BufferedReader br=new BufferedReader(new InputStreamReader(client.getInputStream()) );
再通過br.readline逐條讀取就可以了
2. 請問VC++中如何連接odbc數據源,具體步驟!謝謝!
1.先創建資料庫,在控制面板的管理工具.數據源
2. ADO技術
ActiveX Data Object, ActiveX數據對象。
ADO建立在OLE DB之上,採用ADO技術訪問資料庫的話,實際的調用過程是:ADO客戶程序通過ADO再訪問OLE DB提供的程序,這樣訪問速度就要慢一些。
如果某個關系型資料庫沒有OLE DB的提供程序,那麼可以利用ODBC的OLE DB提供程序去訪問ODBC,然後利用ODBC再去訪問支持ODBC的資料庫。
2.1 條件
l 頭文件和動態庫的載入
#include <comdef.h>
#include <atlbase.h>
#pragma warning(disable:4146)
#import "C:\Program Files\Common Files\System\ado\msado15.dll" named_guids rename("EOF","adoEOF"), rename("BOF","adoBOF")
#pragma warning(default:4146)
using namespace ADODB;
l COM組件的載入
if ( CoInitialize( NULL ) != 0 )
{
AfxMessageBox( _T( "初始化Com庫失敗!" ) );
return FALSE;
}
l 變數的聲明
_ConnectionPtr m_pConnection;
2.2 連接資料庫
m_pConnection.CreateInstance( __uuidof(Connection) );
m_pConnection->ConnectionString = _T( "DSN=PostgreSQL30W;UID=PostGre;PWD=PostGre" );
HRESULT hr = m_pConnection->Open( _T(""), _T(""), _T(""), adConnectUnspecified );
if ( SUCCEEDED( hr ) )
{
AfxMessageBox( _T( "連接資料庫成功!" ) );
}
2.3 訪問資料庫
_CommandPtr pCommand(__uuidof(Command));
_RecordsetPtr pRecordset( __uuidof(Recordset) );
CString strSQL = _T( "select * from \"pg_getProctInfo\"()" );
try
{
pCommand->ActiveConnection=m_pConnection;
pCommand->CommandText=_bstr_t(strSQL);
pRecordset=pCommand->Execute(NULL,NULL,adCmdText);
}
catch (_com_error & e)
{
AfxMessageBox(e.Description());
return ;
}
_variant_t var;
int nRecordNum = pRecordset->GetRecordCount();
while( !pRecordset->GetadoEOF() )
{
TAG_PRODUCTINFO tagProctInfo;
// ID
var = pRecordset->GetCollect( _T( "ID" ) );
tagProctInfo.nProctID= var.intVal;
// Name
var = pRecordset->GetCollect( _T( "Name" ) );
tagProctInfo.strProctName = (char*)_bstr_t(var);
m_vecProctInfo.push_back( tagProctInfo );
pRecordset->MoveNext();
}
pRecordset->Close();
pRecordset.Release();
3. vc++為何不能連接數據源
資料庫編程的思路都是一致的:打開資料庫連接-》執行SQL語句-》獲得查詢結果-》關閉資料庫連接,不同的資料庫訪問技術有不同的要求,比如用C API詰問MySql資料庫的時候還得釋放查詢結果集。
ODBC訪問資料庫得配置數據源
現在用VC、MFC訪問資料庫常用的技術是ADO,很實用!
導入ADO庫
#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "adoEOF")
2、用導入的動態庫的指針操作資料庫.
打開資料庫連接
_ConnectionPtr m_pConn; // 資料庫連接指針
// 創建Conneciton對象
m_pConn.CreateInstance(_T("ADODB.Connection"));
用ConnectionPtr 的open方法m_pConn->Open(_bstr_t(m_sConn),
_T(""), _T(""), lOptions));
m_sConn為你連接資料庫的信息,你應該按照你的要求打開資料庫
然後你用打開的那個連接進行操作資料庫。比如
_RecordsetPtr pRec = m_pConn->Execute(_bstr_t(pszSql), NULL, CmdText);
pszSql 就你要操作資料庫的SQL語句。在這個SQL語句里你可以創建表、更新表等。
用ADO訪問的時候要求初始他COM庫和釋放COM對象
// 初始化COM環境(庫)
::CoInitialize(NULL);
//釋放COM對象
::CoUninitialize();
ODBC訪問資料庫
配置ODBC數據源:打開控制面板下的「數據源」,彈出「ODBC數據源管理器」,選擇DSN選項卡-》添加->你選擇你的SQL Server選項,單擊完成。如圖然後你再按照向導提示添加。
代碼中用ODBC訪問資料庫你得加上afxdb.h頭文件,
用CDataBase 類連接資料庫、CRecordSet類查詢記錄。
現在在VC訪問資料庫常用的是ADO訪問,你可以找一下我前面的回答有ADO訪問資料庫的步驟。
CDataBase m_cODBCDb;
用CDataBase類的OpenEx()函數打開資料庫連接。連接字元串你自己構造一下。
定義一個與上面資料庫相關的查詢對象
CRecordSet m_cODBCRec(&m_cODBCDb);
用這個查詢對象的open方法就可以執行SQL語句與資料庫交互了;
4. vc的ODBC數據源,連接的問題
1:
聽你這么說,你已經將程序打包了啊。
要是把你的程序拿到沒有VC的電腦上,會提示你缺少很多的dll文件。看樣子你已經打包了,或者是另外一台電腦上也有 VC。
2:
你出現的問題,樓上已經說了,就是這個原因,資料庫程序需要有數據源這個橋梁來連接通信(Access可以不用)。
要想不出現這個問題,也簡單啊,在另外一台電腦上,你再創建一個相應的數據源不就可以了嗎。用手動就可以,用程序實現也可以。
手動添加數據源太麻煩,程序拿到哪台電腦上就得手動添加一個數據源。
你可以選擇在程序中實現,自動添加數據源。這樣,只要在另外一台電腦上運行,就在他的電腦上自動創建了一個數據源。
3:實現(自己總結)
/*
頭文件:#include <odbcinst.h> //SQLConfigDataSource
函數:CrreateDSN
功能:動態創建數據源
輸入參數:CString str 名稱
CString strDatabase 資料庫的路徑
CString strDescription 說明
CString strServer 伺服器名稱
CString strUID 用戶名
int iCount 標識資料庫類型, 1表示Access資料庫; 2表示SQL Server; 3表示Oracle資料庫
返回值: int型
1: 表示創建Access數據源成功
-1: 表示創建Access數據源失敗
2: 表示創建SQL Server數據源成功
-2: 表示創建SQL Server數據源失敗
3: 表示創建Oracle數據源成功
-3: 表示創建Oracle數據源失敗
-4: 表示不支持創建其他類型的數據源
*/
AFX_EXT_CLASS int CrreateDSN(CString str, CString strDatabase, CString strDescription, CString strServer, CString strUID, int iCount)
{
char* Attributes;
int mlen, i;
Attributes=new char[256];
switch(iCount)
{
case 1:
sprintf(Attributes,"DSN=%s! DESCRIPTION=%s! DBQ=%s! FIL=MicrosoftAccess! DEFAULTDIR=D:\\Database!!",
str, strDescription, strDatabase);
mlen = strlen(Attributes);
for (i=0; i<mlen; i++)
{
if (Attributes[i] == '!')
Attributes[i] = '\0';
}
if (FALSE == SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Microsoft Access Driver (*.mdb)\0",(LPCSTR)Attributes))
return 1;
else
return -1;
break;
case 2:
sprintf(Attributes,"DSN=%s!Description=%s!server=%s!Database=%s!",
str, strDescription, strServer, strDatabase);
mlen = strlen(Attributes);
for (i=0; i<mlen; i++)
{
if (Attributes[i] == '!')
Attributes[i] = '\0';
}
if (FALSE == SQLConfigDataSource(NULL,ODBC_ADD_DSN,"SQL Server\0",(LPCSTR)Attributes))
return 2;
else
return -2;
break;
case 3:
sprintf(Attributes,"DSN=%s!Description=%s!ServerName=%s!UserID=%s!",
str, strDescription, strServer, strUID);
mlen = strlen(Attributes);
for (i=0; i<mlen; i++)
{
if (Attributes[i] == '!')
Attributes[i] = '\0';
}
if (FALSE == SQLConfigDataSource(NULL,ODBC_ADD_DSN,"Oracle in OraHome92\0",(LPCSTR)Attributes))
return 3;
else
return -3;
break;
default:
return -4;
break;
}
}
5. VC程序自動建立ODBC數據源以方便程序拷貝
用ACCESS2003生成數據源的方法
SQLConfigDataSource(NULL,ODBC_ADD_DSN,_T("Microsoft
Access
Driver
(*.mdb)"),_T("DBQ=「資料庫源文件路徑」\0
DSN=「數據源名稱」\0
DriveId=25"));
如果想把程序改變位置了以後仍能正常生成數據源,這里我提供一個我個人使用的方法:把DBQ=之後的內容改為「\
資料庫文件名」,如「DBQ=\
a.mdb」。前提是資料庫文件和程序文件始終在同一個文件夾內。
6. vc添加數據源...
用建立類向導添加一個類,基類是CRecordSet,如class CSecRecord : public CRecordset
這樣就已經聯上數據源了,接下來就可以進行查詢操作了
---------------------------------------------
CSecRecord secrecord;
CString sSql1="";
sSql1 = "SELECT * FROM roteline" ;
secrecord.Open(CSecRecord::forwardOnly, sSql1, CSecRecord::readOnly);
if(secrecord.IsEOF())
{
return;
}
while (!secrecord.IsEOF())
{
MessageBox(secrecord.m_roteno);
secrecord.MoveNext();
}
--------------------------------------------
不一定要,上面的就是代碼
--------------------------------------------
給你一本參考書,關於VC資料庫編程的
7. 怎麼配置vc++ odbc數據源
打開ODBC數據源管理器 : 控制面板->管理工具->數據源(ODBC)
添加數據源:
[用戶DSN]標簽下,選擇一個資料庫系統,如"Ms Access Database",點[添加]按鈕
選擇驅動程序"Microsoft Access Driver(*.mdb)",點[完成]按鈕
輸入數據源名稱,例如"mydb",[選擇]或者[創建]一個資料庫(.mdb文件),點[確定]
8. vc如何添加數據源
用建立類向導添加一個類,基類是CRecordSet,如class CSecRecord : public CRecordset
這樣就已經聯上數據源了,接下來就可以進行查詢操作了
---------------------------------------------
CSecRecord secrecord;
CString sSql1="";
sSql1 = "SELECT * FROM roteline" ;
secrecord.Open(CSecRecord::forwardOnly, sSql1, CSecRecord::readOnly);
if(secrecord.IsEOF())
{
return;
}
while (!secrecord.IsEOF())
{
MessageBox(secrecord.m_roteno);
secrecord.MoveNext();
}
--------------------------------------------
不一定要,上面的就是代碼
--------------------------------------------
給你一本參考書,關於VC資料庫編程的
參考資料:http://www.codeguru.cn/VC%26MFC/VCProgramGuide/69.html
9. vc++6.0如何添加數據源文件
數據源不是一個文件,而是指資料庫,並且從你描述的情況看來,應該是指ODBC數據源。ODBC是微軟定義的資料庫介面,後台必須有實際的資料庫系統和對應的ODBC驅動。比如ACCESS,或者mysql,或者sql server等都可以。具體怎麼設置可以參考http://database.ctocio.com.cn/tips/283/7380283.shtml。
再者,就算添加了數據源,你的程序也未必就能正確地運行起來,因為不同軟體對資料庫的格式有不同要求。就像如果你用畫圖板去打開一個txt文件,肯定不會有正確結果的。