读书人

BCB多线程读取数据库解决思路

发布时间: 2012-12-31 11:57:52 作者: rapoo

BCB多线程读取数据库


#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#pragma package(smart_init)
__fastcall xtheadm::xtheadm(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
void __fastcall xtheadm::Execute()
{
TADOConnection *ADOConnection1;
TADOQuery *ADOQuery1;
ADOConnection1=new TADOConnection(Application);
ADOQuery1 = new TADOQuery(Application);
ADOConnection1->ConnectionString="Provider=SQLOLEDB.1;Password=123;Persist Security Info=True;User ID=sa;Initial Catalog=swfcf;Data Source=My_Computer";
ADOQuery1->Connection=ADOConnection1;
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("select * from swpr");
ADOQuery1->Open();
while(!ADOQuery1->Eof)
{
Form1->Memo1->Lines->Add(ADOQuery1->Fields->Fields[2]->AsString);
}
ADOQuery1->Close();
ADOQuery1->Close();
}

编译成功,但是执行后,Memo1什么也不显示,请问是哪里错了?
[解决办法]
while(!ADOQuery1->Eof)
{

Form1->Memo1->Lines->Add(ADOQuery1->Fields->Fields[2]->AsString);
ADOQuery1->Next(); //可能就是他
}
[解决办法]
把连接串换成你的试试看,我测试的这个是可以的
void __fastcall test::Execute()
{
//---- Place thread code here ----
CoInitialize(NULL);
TADOConnection *ADOConnection1;
TADOQuery *ADOQuery1;
ADOConnection1=new TADOConnection(Application);
ADOQuery1 = new TADOQuery(Application);
ADOConnection1->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data source="+ExtractFilePath(Application->ExeName)+"test.mdb";
ADOConnection1->LoginPrompt = false;
ADOConnection1->KeepConnection = true;
ADOConnection1->Connected = true;
ADOQuery1->Connection=ADOConnection1;
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("select * from mytable1");
ADOQuery1->Open();
while(!ADOQuery1->Eof)
{
Form1->Memo1->Lines->Add(ADOQuery1->Fields->Fields[2]->AsString);
ADOQuery1->Next();
}
ADOQuery1->Close();
delete ADOQuery1;
delete ADOConnection1;
CoUninitialize();
}

读书人网 >C++ Builder

热点推荐