oracle用 oracle access控制元件中oraadoconnection和oraquery
本地用adoconnection 和adoquery
try
{
sql="select VA.LINE_NAME,VB.DAY_PLAN, VA.DAY_OUTOPUT_QTY,VA.NOW_WORK_HOURS,VB.DAY_PERSON,VC.NG_NUMS \
from mes.V_LINE_QTY_FOR_LED_XYJ VA,mes.V_LINE_PLAN_FOR_LED_XYJ VB,mes.V_LINE_PQC_FOR_LED_XYJ VC \
where VA.LINE_NAME=VB.LINE_NAME and VB.LINE_NAME=VC.LINE_NAME \
and VA.LINE_NAME in ('GTZ02', 'GTZ03', 'GTZ04', 'GTZ05','GY總裝') order by VA.LINE_NAME \
" ;
if(!DataModule1->open(sql,DataModule1->oraclequery))
return;
while (!DataModule1->oraclequery->Eof)
{
AnsiString linename;
AnsiString planNum =0;
int finishNum=0;
int dayperson=0;
int ngnum=0;
int hourNum=0;
AnsiString personNum;//
AnsiString ztRate;
AnsiString ttnowworkhours= DataModule1->oraclequery->FieldByName("NOW_WORK_HOURS")->AsString;
AnsiString ssd=DataModule1->oraclequery->FieldByName("NOW_WORK_HOURS")->AsString;
linename=DataModule1->oraclequery->FieldByName("LINE_NAME")->AsString;
planNum= DataModule1->oraclequery->FieldByName("DAY_PLAN")->AsString;
finishNum=StrToIntDef(DataModule1->oraclequery->FieldByName("DAY_OUTOPUT_QTY")->AsInteger,0);
//abs fabs(1.11);
float nowworkhours= DataModule1->oraclequery->FieldByName("NOW_WORK_HOURS")->AsFloat;
dayperson= StrToIntDef(DataModule1->oraclequery->FieldByName("DAY_PERSON")->AsInteger,1);
ngnum = StrToIntDef(DataModule1->oraclequery->FieldByName("NG_NUMS")->AsInteger,1);
if (nowworkhours==0||finishNum==0)
{
hourNum==0;
}
else
{
hourNum=(finishNum/nowworkhours);
}
if (nowworkhours==0 ||dayperson==0||finishNum==0)
{
personNum=0;
}
else
{
personNum=FormatFloat("0.00",(finishNum/(nowworkhours*dayperson)));
}
if (finishNum==0)
{
ztRate="0.0%";
}
else
{
ztRate=FormatFloat("0.0",(100-ngnum*100.0/finishNum))+"%";
}
Memo1->Lines->Add( Now().FormatString("mm-ddhh:mm:ss")+":"+linename+":"+AnsiString(planNum)+":"+AnsiString(finishNum)+":"+ttnowworkhours+":"+AnsiString(hourNum)+":"+AnsiString(personNum)+":"+AnsiString(ztRate));
sql= "update data set data ='" +AnsiString(planNum)+ "' where local =(select local from local where DeviceNo='" + linename +"') ";
if(!DataModule1->exec(sql,DataModule1->ADOQExec))
return;
DataModule1->oraclequery->Next();
}
}
catch(Exception &ex)
{
Memo1->Lines->Clear();
Memo1->Lines->Add(ex.Message);
}
----資料庫代碼----
bool TDataModule1::open(AnsiString sql,TOraQuery *OracleADOQ)
{
try
{
// ChangeLogicForm->Label1->Caption="";
OracleADOQ->Close();
OracleADOQ->SQL->Clear();
OracleADOQ->SQL->Add(sql);
OracleADOQ->Prepared;
OracleADOQ->Open();
ChangeLogicForm->Label2->Caption=sql;
// OracleADOQ->ExecSQL();
return true;
}
catch(Exception &e)
{
try
{
oracleconnection->Disconnect();
oracleconnection->Server=temporacleserver;
oracleconnection->Username=tempname;
oracleconnection->Password=temppassword;
oracleconnection->Connect();
}
catch(...)
{
return false;
}
return false;
}
}
bool TDataModule1::exec(AnsiString sql,TADOQuery *ADOQ)
{
try
{
// ChangeLogicForm->Label3->Caption="";
ADOQ->Close();
ADOQ->SQL->Clear();
ADOQ->SQL->Add(sql);
ADOQ->ExecSQL();
return true;
}
catch(Exception &e)
{
try
{
ChangeLogicForm->Label3->Caption=AnsiString(connetcount++)+":"+HeadString+TailString;
ADOConnection1->Connected = false;
ADOConnection1->ConnectionString=HeadString+TailString;
ADOConnection1->Connected = true;
// ChangeLogicForm->Memo1->Lines->Add(HeadString+TailString);
}
catch(...)
{
return false;
}
return false;
}
}
uj5u.com熱心網友回復:
資料同步建議用資料庫本身提供的工具如sqlload,沒必要自己編程式同步uj5u.com熱心網友回復:
我的是查詢oracle資料庫中資料 插入大sql中的uj5u.com熱心網友回復:
你的資料庫代碼有問題。try
{
正常的代碼
}
catch(...)
{
例外
}
你把資料庫的關閉放在例外內。肯定有問題。把catch改成finally可以考慮。
另外不要一次把所有的資料讀出來,資料量大時會占用大量記憶體。可以考慮一次讀取1000條之類。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/104353.html
標籤:數據庫及相關技術
上一篇:2020-09-21
