BOOL a;
a = m_pDatabase.Open(NULL);
CRecordset m_pRecord;
m_pRecord.Open (AFX_DB_USE_DEFAULT_TYPE,NULL,CRecordset::none);
问题1:
如何在OPNE函数内设置数据源的路径?
问题2:
接下来该如何用GetDefaultSQL( )或者别的函数来操作数据库?
问题3:
接下来如何把VFP表里的的Qw字段的Memo(就是备注)里面的内容写到指定的文本文件中?
以上
28 个解决方案
#1
m_pDataBase = new CDaoDatabase;
m_pDataBase->Open("A.MDB");//可以设置绝对路径
m_pRecordSet = new CDaoRecordset(m_pDataBase);
//Set up SQL statement
m_pRecordSet->Open(dbOpenDynaset, "Select * from XXX");//Open recordset using SQL statement
m_pDataBase->Open("A.MDB");//可以设置绝对路径
m_pRecordSet = new CDaoRecordset(m_pDataBase);
//Set up SQL statement
m_pRecordSet->Open(dbOpenDynaset, "Select * from XXX");//Open recordset using SQL statement
#2
编译102个错误……
#3
给你一个例子:
#include "stdafx.h"
#import "C:\PROGRA~1\COMMON~1\System\ado\msado15.dll" rename( "EOF", "adoEOF" )
struct InitOle
{
InitOle() { ::CoInitialize(NULL); }
~InitOle() { ::CoUninitialize(); }
} _init_InitOle_;
int main(int argc, char* argv[])
{
printf("Create a adParamReturnValue for Command object to get return value of stored procedure\n");
ADODB::_ConnectionPtr Conn1;
ADODB::_CommandPtr Cmd1;
ADODB::_RecordsetPtr Rs1;
ADODB::_ParameterPtr retParam= NULL;
_variant_t vtEmpty (DISP_E_PARAMNOTFOUND, VT_ERROR);
_variant_t vtEmpty2 (DISP_E_PARAMNOTFOUND, VT_ERROR);
_bstr_t bstrConnect( L"driver={sql server};server=Cell;Database=zhg;UID=sa;PWD=;" );
// the following stored procedure return 12345 int value
_bstr_t bstrCreate ( L"create proc sp_AdoTest( @InParam int,@OutParam int OUTPUT ) "
L"as "
L"select @OutParam = @InParam + 10 "
L"return 12345" );
_bstr_t bstrSP ( L"sp_Adotest" );
try
{
// Establish connection.
Conn1.CreateInstance( __uuidof( ADODB::Connection ) );
Conn1->ConnectionString = bstrConnect;
_bstr_t bstrEmpty;
Conn1->Open( bstrConnect, bstrEmpty, bstrEmpty, -1 );
// Open recordset.
Cmd1.CreateInstance( __uuidof( ADODB::Command ) );
Cmd1->ActiveConnection = Conn1;
Cmd1->CommandText = bstrSP;
Cmd1->CommandType = ADODB::adCmdStoredProc;
retParam=Cmd1->CreateParameter(_bstr_t("returncode"),ADODB::adInteger,ADODB::adParamReturnValue,sizeof(int));
Cmd1->Parameters->Append(retParam);
Cmd1->Parameters->Refresh();
Cmd1->Parameters->Item[ _variant_t( (long) 1 ) ]->Value =
_variant_t( (long) 10 );
Cmd1->Execute( &vtEmpty, &vtEmpty2,ADODB::adCmdUnknown );
// Get return value of the stored procedure.
TCHAR tcbuf[1024];
long retvalue=(long)Cmd1->Parameters->Item[_variant_t(0L)]->Value;
wsprintf(tcbuf,"retvalue:%d",retvalue);
MessageBox(NULL,tcbuf,"Output",MB_OK);
}
catch(...)
{
MessageBox(NULL,"ERROR","ERROR",MB_OK);
}
return 0;
#include "stdafx.h"
#import "C:\PROGRA~1\COMMON~1\System\ado\msado15.dll" rename( "EOF", "adoEOF" )
struct InitOle
{
InitOle() { ::CoInitialize(NULL); }
~InitOle() { ::CoUninitialize(); }
} _init_InitOle_;
int main(int argc, char* argv[])
{
printf("Create a adParamReturnValue for Command object to get return value of stored procedure\n");
ADODB::_ConnectionPtr Conn1;
ADODB::_CommandPtr Cmd1;
ADODB::_RecordsetPtr Rs1;
ADODB::_ParameterPtr retParam= NULL;
_variant_t vtEmpty (DISP_E_PARAMNOTFOUND, VT_ERROR);
_variant_t vtEmpty2 (DISP_E_PARAMNOTFOUND, VT_ERROR);
_bstr_t bstrConnect( L"driver={sql server};server=Cell;Database=zhg;UID=sa;PWD=;" );
// the following stored procedure return 12345 int value
_bstr_t bstrCreate ( L"create proc sp_AdoTest( @InParam int,@OutParam int OUTPUT ) "
L"as "
L"select @OutParam = @InParam + 10 "
L"return 12345" );
_bstr_t bstrSP ( L"sp_Adotest" );
try
{
// Establish connection.
Conn1.CreateInstance( __uuidof( ADODB::Connection ) );
Conn1->ConnectionString = bstrConnect;
_bstr_t bstrEmpty;
Conn1->Open( bstrConnect, bstrEmpty, bstrEmpty, -1 );
// Open recordset.
Cmd1.CreateInstance( __uuidof( ADODB::Command ) );
Cmd1->ActiveConnection = Conn1;
Cmd1->CommandText = bstrSP;
Cmd1->CommandType = ADODB::adCmdStoredProc;
retParam=Cmd1->CreateParameter(_bstr_t("returncode"),ADODB::adInteger,ADODB::adParamReturnValue,sizeof(int));
Cmd1->Parameters->Append(retParam);
Cmd1->Parameters->Refresh();
Cmd1->Parameters->Item[ _variant_t( (long) 1 ) ]->Value =
_variant_t( (long) 10 );
Cmd1->Execute( &vtEmpty, &vtEmpty2,ADODB::adCmdUnknown );
// Get return value of the stored procedure.
TCHAR tcbuf[1024];
long retvalue=(long)Cmd1->Parameters->Item[_variant_t(0L)]->Value;
wsprintf(tcbuf,"retvalue:%d",retvalue);
MessageBox(NULL,tcbuf,"Output",MB_OK);
}
catch(...)
{
MessageBox(NULL,"ERROR","ERROR",MB_OK);
}
return 0;
#4
还是不行啊~~~
#5
CDatabase* m_pDatabase = new CDatabase;
m_pDatabase->Open(NULL);//这儿设置绝对路径还是不行
CRecordset* m_pRecordSet = new CRecordset(m_pDatabase);
m_pRecordSet->Open(AFX_DB_USE_DEFAULT_TYPE,"SELECT Bt FROM ZX.DBF",CRecordset::none);
m_pDatabase->Close ();
m_pRecordSet->Close ();
}
编译能通过,但是结束时还是有错误
m_pDatabase->Open(NULL);//这儿设置绝对路径还是不行
CRecordset* m_pRecordSet = new CRecordset(m_pDatabase);
m_pRecordSet->Open(AFX_DB_USE_DEFAULT_TYPE,"SELECT Bt FROM ZX.DBF",CRecordset::none);
m_pDatabase->Close ();
m_pRecordSet->Close ();
}
编译能通过,但是结束时还是有错误
#6
102个错误,应该是要包含头文件吧
#7
在构造函数中 m_pDatabase=NULL; m_pRecordSet=NULL;
#8
还是不清楚………
#9
wjt_6@263.net发给我试试
#10
up
#11
要发什么?
VFP里面设置个有Mome的就能实验
然后用Projects 里的WIN32 CONSOLE APPLICATION做
VFP里面设置个有Mome的就能实验
然后用Projects 里的WIN32 CONSOLE APPLICATION做
#12
首先,要包含头文件#include <AFXDB.H>
其次,设置数据源时因该这样:
CDatabase database;
database.OpenEx(_T("DSN=你的数据源名称),CDatabase::......);
省略号表示你想要打开的模式。
再次,我本人觉得CRecordSet,不能直接用,用户应该使用继承与它的子类,因 为他本身没有字段数据成员。你可以使用insert菜单,添加一个新类,基类选择成CRecordSet,VC会然你输入数据源的名称和记录集所对应的表,等类生成了,就可以直接用了,例如:
CYourSet yourset;
yourset.Open();注意:open的括号里什么也不用写。
最后,我觉得这样式正确地,百试不爽。
其次,设置数据源时因该这样:
CDatabase database;
database.OpenEx(_T("DSN=你的数据源名称),CDatabase::......);
省略号表示你想要打开的模式。
再次,我本人觉得CRecordSet,不能直接用,用户应该使用继承与它的子类,因 为他本身没有字段数据成员。你可以使用insert菜单,添加一个新类,基类选择成CRecordSet,VC会然你输入数据源的名称和记录集所对应的表,等类生成了,就可以直接用了,例如:
CYourSet yourset;
yourset.Open();注意:open的括号里什么也不用写。
最后,我觉得这样式正确地,百试不爽。
#13
同意 guanjinke(纶巾客) :
自己派生一个CRecordSet类,ClassWazard会自动为你添加代码,
自己派生一个CRecordSet类,ClassWazard会自动为你添加代码,
#14
恩
问题1解决了
1、那该如何操作数据库呢?操作的结果显示在哪儿呢?
2、接下来如何把VFP表里的的Qw字段的Memo(就是备注)里面的内容写到指定的文本文件中?
问题1解决了
1、那该如何操作数据库呢?操作的结果显示在哪儿呢?
2、接下来如何把VFP表里的的Qw字段的Memo(就是备注)里面的内容写到指定的文本文件中?
#15
假设我的数据源里有ZX.DBF这张表,如何操作这张表完成我上面的问题呢?
谢谢
谢谢
#16
基本同意 howard(竹园丝音[住院死因 哈哈~~~~~~])
我做过很多这类程序,从没出问题,不知你的102个error从何而来。
我做过很多这类程序,从没出问题,不知你的102个error从何而来。
#17
CDatabase不能打开绝对数据路径,只能用来打开数据源,推荐看微软出版社的类库参考
#18
其实这些问题很简单的,我也有现成的源码!
问题是,没有给分啊!
问题是,没有给分啊!
#19
………………
楼上的,不是我不想给,确实是我不会给啊~
告诉我给分的方法……
楼上的,不是我不想给,确实是我不会给啊~
告诉我给分的方法……
#20
好了,hoco(流星雨) ,你应该收到了吧?
#21
啊啊啊啊~~
没人知道了吗?
急了!!
没人知道了吗?
急了!!
#22
在你生成的数据集类里,VC自动生成了一些数据成员,你仔细观察他们的命名方式,只是在你的表中的字段名前加了一个m_,其实这里的每一个数据成员都对应表里的一个字段,不过这些数据成员都是CString,你可以直接使用它们,例如:
CYourSet yourset;
CString temp;
yourset.Open();
temp=yourset.your_want_field;//数据库里的内容已经到temp里了,your_want_field在 CRecordSet子类里
//如果想读下一条那么
yourset.MoveNext();
temp+yourset.your_want_field;
就这么简单
CYourSet yourset;
CString temp;
yourset.Open();
temp=yourset.your_want_field;//数据库里的内容已经到temp里了,your_want_field在 CRecordSet子类里
//如果想读下一条那么
yourset.MoveNext();
temp+yourset.your_want_field;
就这么简单
#23
在你生成的数据集类里,VC自动生成了一些数据成员,你仔细观察他们的命名方式,只是在你的表中的字段名前加了一个m_
以上没有发现……
后来我用MSDN下GetFieldValue函数提供的例子可行
但是
CDatabase m_pDatabase;
m_pDatabase.OpenEx(_T("DSN=zx"),0);
CMyRecordset *m_pMyRecordset = new CMyRecordset;
CRecordset rs( &m_pDatabase );
rs.Open( CRecordset::forwardOnly, _T( "SELECT Qw FROM ZX.DBF") );//为什么这个SQL语句不能加WHERE 条件啊???
CString varValue;
short nFields = rs.GetODBCFieldCount( );
while( !rs.IsEOF( ) )
{
for( short index = 0; index < nFields; index++ )
{
rs.GetFieldValue( index, varValue );
}
rs.MoveNext( );
}
rs.Close( );
m_pDatabase.Close ();
rs.Open( CRecordset::forwardOnly, _T( "SELECT Qw FROM ZX.DBF") );//为什么这个SQL语句不能加WHERE 条件啊???
以上没有发现……
后来我用MSDN下GetFieldValue函数提供的例子可行
但是
CDatabase m_pDatabase;
m_pDatabase.OpenEx(_T("DSN=zx"),0);
CMyRecordset *m_pMyRecordset = new CMyRecordset;
CRecordset rs( &m_pDatabase );
rs.Open( CRecordset::forwardOnly, _T( "SELECT Qw FROM ZX.DBF") );//为什么这个SQL语句不能加WHERE 条件啊???
CString varValue;
short nFields = rs.GetODBCFieldCount( );
while( !rs.IsEOF( ) )
{
for( short index = 0; index < nFields; index++ )
{
rs.GetFieldValue( index, varValue );
}
rs.MoveNext( );
}
rs.Close( );
m_pDatabase.Close ();
rs.Open( CRecordset::forwardOnly, _T( "SELECT Qw FROM ZX.DBF") );//为什么这个SQL语句不能加WHERE 条件啊???
#24
你可以在过滤成员变量里加入条件。例如:
m_pMyRecordSet->m_strFilter="条件“;其中条件中不能出现WHERE,只需要写成如下形式:假设表中某个字段名为firstfield,需要让他的值大于20,写成
m_pMyRecordSet->m_strFilter="firstfield>'20'";
如果,条件中有变量,那么应写成一下形式:
m_pMyRecordSet->m_strFilter="firstfield>"+变量;
过滤条件写好以后再打开数据集:
m_pMyRecordSet->Open();
我现在不知道成员变量m_strFileter的拼写形式对不对,你自己查查看。
m_pMyRecordSet->m_strFilter="条件“;其中条件中不能出现WHERE,只需要写成如下形式:假设表中某个字段名为firstfield,需要让他的值大于20,写成
m_pMyRecordSet->m_strFilter="firstfield>'20'";
如果,条件中有变量,那么应写成一下形式:
m_pMyRecordSet->m_strFilter="firstfield>"+变量;
过滤条件写好以后再打开数据集:
m_pMyRecordSet->Open();
我现在不知道成员变量m_strFileter的拼写形式对不对,你自己查查看。
#25
OK啦!!!
分先给你吧~
呵呵
还是有问题我再你吧~
谢谢~~
分先给你吧~
呵呵
还是有问题我再你吧~
谢谢~~
#26
如果,条件中有变量,那么应写成一下形式:
m_pMyRecordSet-> m_strFilter="firstfield> "+变量
这个好象行不通啊
m_pMyRecordSet-> m_strFilter="firstfield> "+变量
这个好象行不通啊
#27
fire_zxv(辉)
不好意思,最近没有上
现在给出解答:
CString sql="select * from dict where chinese like '%"+str+"%'";
m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,sql,CRecordset::none);
你可以通过这种方式来进行查询。
也可以通过设置m_strFilter
给一个例子吧!
m_pMyRecordSet-> m_strFilter="firstfield> "+变量//你这个当然不对啦!格式不对马!呵呵
比如说你要查的字段名是:name
m_pMyRecordSet-> m_strFilter="name='"+m_name+"'";//其中m_name是变量!
不好意思,最近没有上
现在给出解答:
CString sql="select * from dict where chinese like '%"+str+"%'";
m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,sql,CRecordset::none);
你可以通过这种方式来进行查询。
也可以通过设置m_strFilter
给一个例子吧!
m_pMyRecordSet-> m_strFilter="firstfield> "+变量//你这个当然不对啦!格式不对马!呵呵
比如说你要查的字段名是:name
m_pMyRecordSet-> m_strFilter="name='"+m_name+"'";//其中m_name是变量!
#28
ft,没有分了啊!
:(,不爽!
fire_zxv(辉)
问题给你解决了以后可要给我份啊!
:(,不爽!
fire_zxv(辉)
问题给你解决了以后可要给我份啊!
#1
m_pDataBase = new CDaoDatabase;
m_pDataBase->Open("A.MDB");//可以设置绝对路径
m_pRecordSet = new CDaoRecordset(m_pDataBase);
//Set up SQL statement
m_pRecordSet->Open(dbOpenDynaset, "Select * from XXX");//Open recordset using SQL statement
m_pDataBase->Open("A.MDB");//可以设置绝对路径
m_pRecordSet = new CDaoRecordset(m_pDataBase);
//Set up SQL statement
m_pRecordSet->Open(dbOpenDynaset, "Select * from XXX");//Open recordset using SQL statement
#2
编译102个错误……
#3
给你一个例子:
#include "stdafx.h"
#import "C:\PROGRA~1\COMMON~1\System\ado\msado15.dll" rename( "EOF", "adoEOF" )
struct InitOle
{
InitOle() { ::CoInitialize(NULL); }
~InitOle() { ::CoUninitialize(); }
} _init_InitOle_;
int main(int argc, char* argv[])
{
printf("Create a adParamReturnValue for Command object to get return value of stored procedure\n");
ADODB::_ConnectionPtr Conn1;
ADODB::_CommandPtr Cmd1;
ADODB::_RecordsetPtr Rs1;
ADODB::_ParameterPtr retParam= NULL;
_variant_t vtEmpty (DISP_E_PARAMNOTFOUND, VT_ERROR);
_variant_t vtEmpty2 (DISP_E_PARAMNOTFOUND, VT_ERROR);
_bstr_t bstrConnect( L"driver={sql server};server=Cell;Database=zhg;UID=sa;PWD=;" );
// the following stored procedure return 12345 int value
_bstr_t bstrCreate ( L"create proc sp_AdoTest( @InParam int,@OutParam int OUTPUT ) "
L"as "
L"select @OutParam = @InParam + 10 "
L"return 12345" );
_bstr_t bstrSP ( L"sp_Adotest" );
try
{
// Establish connection.
Conn1.CreateInstance( __uuidof( ADODB::Connection ) );
Conn1->ConnectionString = bstrConnect;
_bstr_t bstrEmpty;
Conn1->Open( bstrConnect, bstrEmpty, bstrEmpty, -1 );
// Open recordset.
Cmd1.CreateInstance( __uuidof( ADODB::Command ) );
Cmd1->ActiveConnection = Conn1;
Cmd1->CommandText = bstrSP;
Cmd1->CommandType = ADODB::adCmdStoredProc;
retParam=Cmd1->CreateParameter(_bstr_t("returncode"),ADODB::adInteger,ADODB::adParamReturnValue,sizeof(int));
Cmd1->Parameters->Append(retParam);
Cmd1->Parameters->Refresh();
Cmd1->Parameters->Item[ _variant_t( (long) 1 ) ]->Value =
_variant_t( (long) 10 );
Cmd1->Execute( &vtEmpty, &vtEmpty2,ADODB::adCmdUnknown );
// Get return value of the stored procedure.
TCHAR tcbuf[1024];
long retvalue=(long)Cmd1->Parameters->Item[_variant_t(0L)]->Value;
wsprintf(tcbuf,"retvalue:%d",retvalue);
MessageBox(NULL,tcbuf,"Output",MB_OK);
}
catch(...)
{
MessageBox(NULL,"ERROR","ERROR",MB_OK);
}
return 0;
#include "stdafx.h"
#import "C:\PROGRA~1\COMMON~1\System\ado\msado15.dll" rename( "EOF", "adoEOF" )
struct InitOle
{
InitOle() { ::CoInitialize(NULL); }
~InitOle() { ::CoUninitialize(); }
} _init_InitOle_;
int main(int argc, char* argv[])
{
printf("Create a adParamReturnValue for Command object to get return value of stored procedure\n");
ADODB::_ConnectionPtr Conn1;
ADODB::_CommandPtr Cmd1;
ADODB::_RecordsetPtr Rs1;
ADODB::_ParameterPtr retParam= NULL;
_variant_t vtEmpty (DISP_E_PARAMNOTFOUND, VT_ERROR);
_variant_t vtEmpty2 (DISP_E_PARAMNOTFOUND, VT_ERROR);
_bstr_t bstrConnect( L"driver={sql server};server=Cell;Database=zhg;UID=sa;PWD=;" );
// the following stored procedure return 12345 int value
_bstr_t bstrCreate ( L"create proc sp_AdoTest( @InParam int,@OutParam int OUTPUT ) "
L"as "
L"select @OutParam = @InParam + 10 "
L"return 12345" );
_bstr_t bstrSP ( L"sp_Adotest" );
try
{
// Establish connection.
Conn1.CreateInstance( __uuidof( ADODB::Connection ) );
Conn1->ConnectionString = bstrConnect;
_bstr_t bstrEmpty;
Conn1->Open( bstrConnect, bstrEmpty, bstrEmpty, -1 );
// Open recordset.
Cmd1.CreateInstance( __uuidof( ADODB::Command ) );
Cmd1->ActiveConnection = Conn1;
Cmd1->CommandText = bstrSP;
Cmd1->CommandType = ADODB::adCmdStoredProc;
retParam=Cmd1->CreateParameter(_bstr_t("returncode"),ADODB::adInteger,ADODB::adParamReturnValue,sizeof(int));
Cmd1->Parameters->Append(retParam);
Cmd1->Parameters->Refresh();
Cmd1->Parameters->Item[ _variant_t( (long) 1 ) ]->Value =
_variant_t( (long) 10 );
Cmd1->Execute( &vtEmpty, &vtEmpty2,ADODB::adCmdUnknown );
// Get return value of the stored procedure.
TCHAR tcbuf[1024];
long retvalue=(long)Cmd1->Parameters->Item[_variant_t(0L)]->Value;
wsprintf(tcbuf,"retvalue:%d",retvalue);
MessageBox(NULL,tcbuf,"Output",MB_OK);
}
catch(...)
{
MessageBox(NULL,"ERROR","ERROR",MB_OK);
}
return 0;
#4
还是不行啊~~~
#5
CDatabase* m_pDatabase = new CDatabase;
m_pDatabase->Open(NULL);//这儿设置绝对路径还是不行
CRecordset* m_pRecordSet = new CRecordset(m_pDatabase);
m_pRecordSet->Open(AFX_DB_USE_DEFAULT_TYPE,"SELECT Bt FROM ZX.DBF",CRecordset::none);
m_pDatabase->Close ();
m_pRecordSet->Close ();
}
编译能通过,但是结束时还是有错误
m_pDatabase->Open(NULL);//这儿设置绝对路径还是不行
CRecordset* m_pRecordSet = new CRecordset(m_pDatabase);
m_pRecordSet->Open(AFX_DB_USE_DEFAULT_TYPE,"SELECT Bt FROM ZX.DBF",CRecordset::none);
m_pDatabase->Close ();
m_pRecordSet->Close ();
}
编译能通过,但是结束时还是有错误
#6
102个错误,应该是要包含头文件吧
#7
在构造函数中 m_pDatabase=NULL; m_pRecordSet=NULL;
#8
还是不清楚………
#9
wjt_6@263.net发给我试试
#10
up
#11
要发什么?
VFP里面设置个有Mome的就能实验
然后用Projects 里的WIN32 CONSOLE APPLICATION做
VFP里面设置个有Mome的就能实验
然后用Projects 里的WIN32 CONSOLE APPLICATION做
#12
首先,要包含头文件#include <AFXDB.H>
其次,设置数据源时因该这样:
CDatabase database;
database.OpenEx(_T("DSN=你的数据源名称),CDatabase::......);
省略号表示你想要打开的模式。
再次,我本人觉得CRecordSet,不能直接用,用户应该使用继承与它的子类,因 为他本身没有字段数据成员。你可以使用insert菜单,添加一个新类,基类选择成CRecordSet,VC会然你输入数据源的名称和记录集所对应的表,等类生成了,就可以直接用了,例如:
CYourSet yourset;
yourset.Open();注意:open的括号里什么也不用写。
最后,我觉得这样式正确地,百试不爽。
其次,设置数据源时因该这样:
CDatabase database;
database.OpenEx(_T("DSN=你的数据源名称),CDatabase::......);
省略号表示你想要打开的模式。
再次,我本人觉得CRecordSet,不能直接用,用户应该使用继承与它的子类,因 为他本身没有字段数据成员。你可以使用insert菜单,添加一个新类,基类选择成CRecordSet,VC会然你输入数据源的名称和记录集所对应的表,等类生成了,就可以直接用了,例如:
CYourSet yourset;
yourset.Open();注意:open的括号里什么也不用写。
最后,我觉得这样式正确地,百试不爽。
#13
同意 guanjinke(纶巾客) :
自己派生一个CRecordSet类,ClassWazard会自动为你添加代码,
自己派生一个CRecordSet类,ClassWazard会自动为你添加代码,
#14
恩
问题1解决了
1、那该如何操作数据库呢?操作的结果显示在哪儿呢?
2、接下来如何把VFP表里的的Qw字段的Memo(就是备注)里面的内容写到指定的文本文件中?
问题1解决了
1、那该如何操作数据库呢?操作的结果显示在哪儿呢?
2、接下来如何把VFP表里的的Qw字段的Memo(就是备注)里面的内容写到指定的文本文件中?
#15
假设我的数据源里有ZX.DBF这张表,如何操作这张表完成我上面的问题呢?
谢谢
谢谢
#16
基本同意 howard(竹园丝音[住院死因 哈哈~~~~~~])
我做过很多这类程序,从没出问题,不知你的102个error从何而来。
我做过很多这类程序,从没出问题,不知你的102个error从何而来。
#17
CDatabase不能打开绝对数据路径,只能用来打开数据源,推荐看微软出版社的类库参考
#18
其实这些问题很简单的,我也有现成的源码!
问题是,没有给分啊!
问题是,没有给分啊!
#19
………………
楼上的,不是我不想给,确实是我不会给啊~
告诉我给分的方法……
楼上的,不是我不想给,确实是我不会给啊~
告诉我给分的方法……
#20
好了,hoco(流星雨) ,你应该收到了吧?
#21
啊啊啊啊~~
没人知道了吗?
急了!!
没人知道了吗?
急了!!
#22
在你生成的数据集类里,VC自动生成了一些数据成员,你仔细观察他们的命名方式,只是在你的表中的字段名前加了一个m_,其实这里的每一个数据成员都对应表里的一个字段,不过这些数据成员都是CString,你可以直接使用它们,例如:
CYourSet yourset;
CString temp;
yourset.Open();
temp=yourset.your_want_field;//数据库里的内容已经到temp里了,your_want_field在 CRecordSet子类里
//如果想读下一条那么
yourset.MoveNext();
temp+yourset.your_want_field;
就这么简单
CYourSet yourset;
CString temp;
yourset.Open();
temp=yourset.your_want_field;//数据库里的内容已经到temp里了,your_want_field在 CRecordSet子类里
//如果想读下一条那么
yourset.MoveNext();
temp+yourset.your_want_field;
就这么简单
#23
在你生成的数据集类里,VC自动生成了一些数据成员,你仔细观察他们的命名方式,只是在你的表中的字段名前加了一个m_
以上没有发现……
后来我用MSDN下GetFieldValue函数提供的例子可行
但是
CDatabase m_pDatabase;
m_pDatabase.OpenEx(_T("DSN=zx"),0);
CMyRecordset *m_pMyRecordset = new CMyRecordset;
CRecordset rs( &m_pDatabase );
rs.Open( CRecordset::forwardOnly, _T( "SELECT Qw FROM ZX.DBF") );//为什么这个SQL语句不能加WHERE 条件啊???
CString varValue;
short nFields = rs.GetODBCFieldCount( );
while( !rs.IsEOF( ) )
{
for( short index = 0; index < nFields; index++ )
{
rs.GetFieldValue( index, varValue );
}
rs.MoveNext( );
}
rs.Close( );
m_pDatabase.Close ();
rs.Open( CRecordset::forwardOnly, _T( "SELECT Qw FROM ZX.DBF") );//为什么这个SQL语句不能加WHERE 条件啊???
以上没有发现……
后来我用MSDN下GetFieldValue函数提供的例子可行
但是
CDatabase m_pDatabase;
m_pDatabase.OpenEx(_T("DSN=zx"),0);
CMyRecordset *m_pMyRecordset = new CMyRecordset;
CRecordset rs( &m_pDatabase );
rs.Open( CRecordset::forwardOnly, _T( "SELECT Qw FROM ZX.DBF") );//为什么这个SQL语句不能加WHERE 条件啊???
CString varValue;
short nFields = rs.GetODBCFieldCount( );
while( !rs.IsEOF( ) )
{
for( short index = 0; index < nFields; index++ )
{
rs.GetFieldValue( index, varValue );
}
rs.MoveNext( );
}
rs.Close( );
m_pDatabase.Close ();
rs.Open( CRecordset::forwardOnly, _T( "SELECT Qw FROM ZX.DBF") );//为什么这个SQL语句不能加WHERE 条件啊???
#24
你可以在过滤成员变量里加入条件。例如:
m_pMyRecordSet->m_strFilter="条件“;其中条件中不能出现WHERE,只需要写成如下形式:假设表中某个字段名为firstfield,需要让他的值大于20,写成
m_pMyRecordSet->m_strFilter="firstfield>'20'";
如果,条件中有变量,那么应写成一下形式:
m_pMyRecordSet->m_strFilter="firstfield>"+变量;
过滤条件写好以后再打开数据集:
m_pMyRecordSet->Open();
我现在不知道成员变量m_strFileter的拼写形式对不对,你自己查查看。
m_pMyRecordSet->m_strFilter="条件“;其中条件中不能出现WHERE,只需要写成如下形式:假设表中某个字段名为firstfield,需要让他的值大于20,写成
m_pMyRecordSet->m_strFilter="firstfield>'20'";
如果,条件中有变量,那么应写成一下形式:
m_pMyRecordSet->m_strFilter="firstfield>"+变量;
过滤条件写好以后再打开数据集:
m_pMyRecordSet->Open();
我现在不知道成员变量m_strFileter的拼写形式对不对,你自己查查看。
#25
OK啦!!!
分先给你吧~
呵呵
还是有问题我再你吧~
谢谢~~
分先给你吧~
呵呵
还是有问题我再你吧~
谢谢~~
#26
如果,条件中有变量,那么应写成一下形式:
m_pMyRecordSet-> m_strFilter="firstfield> "+变量
这个好象行不通啊
m_pMyRecordSet-> m_strFilter="firstfield> "+变量
这个好象行不通啊
#27
fire_zxv(辉)
不好意思,最近没有上
现在给出解答:
CString sql="select * from dict where chinese like '%"+str+"%'";
m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,sql,CRecordset::none);
你可以通过这种方式来进行查询。
也可以通过设置m_strFilter
给一个例子吧!
m_pMyRecordSet-> m_strFilter="firstfield> "+变量//你这个当然不对啦!格式不对马!呵呵
比如说你要查的字段名是:name
m_pMyRecordSet-> m_strFilter="name='"+m_name+"'";//其中m_name是变量!
不好意思,最近没有上
现在给出解答:
CString sql="select * from dict where chinese like '%"+str+"%'";
m_pset->Open(AFX_DB_USE_DEFAULT_TYPE,sql,CRecordset::none);
你可以通过这种方式来进行查询。
也可以通过设置m_strFilter
给一个例子吧!
m_pMyRecordSet-> m_strFilter="firstfield> "+变量//你这个当然不对啦!格式不对马!呵呵
比如说你要查的字段名是:name
m_pMyRecordSet-> m_strFilter="name='"+m_name+"'";//其中m_name是变量!
#28
ft,没有分了啊!
:(,不爽!
fire_zxv(辉)
问题给你解决了以后可要给我份啊!
:(,不爽!
fire_zxv(辉)
问题给你解决了以后可要给我份啊!