STDMETHODIMP TCKWorkImpl::Get24OIKdata(OIKCategory eCat, int iParam,
DATE dDate, LPSAFEARRAY* pptVArray)
{
*pptVArray = NULL;
long rgIndices = 0;
SAFEARRAYBOUND sab[1];
HRESULT hr;
sab[0].cElements = 24;
sab[0].lLbound = 0;
try
{
spAdo->ProcedureName = "Get24hDataByOiId2D;1";
spAdo->Parameters->Refresh();
spAdo->Parameters->Items[1]->Value = eCat;
spAdo->Parameters->Items[2]->Value = iParam;
spAdo->Parameters->Items[3]->Value = 0;
spAdo->Parameters->Items[301]->Value = 1;
spAdo->Parameters->Items[302]->Value = 60;
spAdo->Parameters->Items[303]->Value = Date().Val-(dDate ? dDate : dDefault);
spAdo->Parameters->Items[304]->Value = 24;
spAdo->Parameters->Items[305]->Value = 0;
spAdo->Open();
*pptVArray = SafeArrayCreate(VT_VARIANT, 1, sab);
if(!(*pptVArray ))return E_OUTOFMEMORY;
while(!spAdo->Eof)
{
hr = SafeArrayPutElement(*pptVArray, &rgIndices, &(spAdo->Fields->Fields[1]->AsVariant));
spAdo->Next();
rgIndices++;
}
spAdo->Close();
}
catch(Exception &e)
{
return Error(e.Message.c_str(), IID_ICKWork);
}
return S_OK;
}
Работа с базой из Com через Adodb
Пишу COM-овскую библиотечку для работы с базой. Один из методов интерфейса выглядит так:
Что, никто ничего?
Цитата:
Originally posted by honeybeer
Пишу COM-овскую библиотечку для работы с базой. Один из методов интерфейса выглядит так:
[COLOR=darkred]--- skip ---[/COLOR]
знающие подскажите, что здесь надо поправить
Пишу COM-овскую библиотечку для работы с базой. Один из методов интерфейса выглядит так:
[COLOR=darkred]--- skip ---[/COLOR]
знающие подскажите, что здесь надо поправить
Э... А в чём вообще проблема?
Цитата:
Originally posted by Plisteron
Э... А в чём вообще проблема?
Э... А в чём вообще проблема?
Ну просто я с COM технологией практически не работал, вот и подумал, что товарищи более искушенные могли бы чего нибудь присоветовать. В принципе, код рабочий, только выборка происходит ИМХО слишком медленно. Вот код VBA:
Код:
Sub Test()
Dim v As New CKWork
Dim sTime As Long
sTime = GetTickCount()
v.Connect
v.DefaultDate = Date - 1
Range("J2:J25") = Application.Transpose(v.Get24OIKdata(ocCB1, 875, Range("J1").Value2))
Range("K2:K25") = Application.Transpose(v.Get24OIKdata(ocCB1, 875, Range("K1").Value2))
Range("L2:L25") = Application.Transpose(v.Get24OIKdata(ocCB1, 875, Range("L1").Value2))
Range("M2:M25") = Application.Transpose(v.Get24OIKdata(ocCB1, 875, Range("M1").Value2))
Range("N2:N25") = Application.Transpose(v.Get24OIKdata(ocCB1, 875, Range("N1").Value2))
Range("o2:O25") = Application.Transpose(v.Get24OIKdata(ocCB1, 875, Range("O1").Value2))
v.Disconnect
sTime = GetTickCount() - sTime
PopupForm.Show
PopupForm.Label2.Caption = sTime
End Sub
Dim v As New CKWork
Dim sTime As Long
sTime = GetTickCount()
v.Connect
v.DefaultDate = Date - 1
Range("J2:J25") = Application.Transpose(v.Get24OIKdata(ocCB1, 875, Range("J1").Value2))
Range("K2:K25") = Application.Transpose(v.Get24OIKdata(ocCB1, 875, Range("K1").Value2))
Range("L2:L25") = Application.Transpose(v.Get24OIKdata(ocCB1, 875, Range("L1").Value2))
Range("M2:M25") = Application.Transpose(v.Get24OIKdata(ocCB1, 875, Range("M1").Value2))
Range("N2:N25") = Application.Transpose(v.Get24OIKdata(ocCB1, 875, Range("N1").Value2))
Range("o2:O25") = Application.Transpose(v.Get24OIKdata(ocCB1, 875, Range("O1").Value2))
v.Disconnect
sTime = GetTickCount() - sTime
PopupForm.Show
PopupForm.Label2.Caption = sTime
End Sub
в среднем ~3000мс
Цитата:
Originally posted by honeybeer
Ну просто я с COM технологией практически не работал, вот и подумал, что товарищи более искушенные могли бы чего нибудь присоветовать. В принципе, код рабочий, только выборка происходит ИМХО слишком медленно.
Ну просто я с COM технологией практически не работал, вот и подумал, что товарищи более искушенные могли бы чего нибудь присоветовать. В принципе, код рабочий, только выборка происходит ИМХО слишком медленно.
На вопрос с такой обобщённой темой чаще всего можно услышать ответ: "Почитай MSDN".
За какое время выполнится этот код, если все операции с объектами Range заменить на операции переменными типа Long? Инвми словами, действително ли "узким местом" является твой код, а не Exel-овские операции с ячейками таблицы?
Уж извини, мне самому ломы в твоём коде разбираться, тем более, что он приведён не полностью.