![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с формированием отчета [D7, IB6.x]
Jiny © (2004-09-25 11:44:00)1 вопрос : при запуске данного отчета на локальной базе все нормально, но стоит подключиться к удаленному IP, после второго захода на запрос - выдает ошибку : «Dynamic SQL error : SQL error code = -104, user name required”
Хотя трассировал код, база, на которую смотрит компонент IBquery – connected, следовательно,
логин и пароль давно одобрен сервером.
2 вопрос : кот-нить может выслать инфу по оформлению Excel документа через OLE, т.к. то что я нашел в инете, не очень мне помогло, С экспортом связался недавно, так что, простите за безграмотность.
procedureTFrmAnal_klDocObor.BtnExcelClick(Sender: TObject);
const TmpFinalJrn: array [0..5] of string=('FP1_','FR1_','FrFil1_','Spi1_','FP2_','FR2_');
var
TmpDateFilter,TmpDateTitle,TmpKlFilter,tmpKlTitle,TmpKatFilter,TmpKatTitle,TmpUSERFilter,TmpUserTitle,tmpSelFields: String;
i,j,Jrn,tmpSer,tmpRepRecs: Integer;
xl: variant;
begin
{Поля учавствующие в отчете}
tmpSelFields:='';
for i:=0 to lvFields.Items.Count-1 do
begin
If lvFields.Checked[i]=true then
begin
tmpSelFields:=tmpSelFields+tmpFieldArr[i]+','; //данные из глобального массива, где загнаны названия полей
end;
end;
If tmpSelFields'' then
tmpSelFields:=Copy(TmpSelFields,1,length(TmpSelFields)-1);
{Категории, учавствующие в отчете}
for i:=0 to lvKat.Items.Count-1 do
begin
If lvKat.Checked[i]=true then
begin
TmpKatFilter:=TmpKatFilter+' kat='+inttostr(tmpKatNum[i])+' or ';
end;
end;
If TmpKatFilter'' then
TmpKatFilter:=' and ('+Copy(TmpKatFilter,1,length(TmpKatFilter)-4)+') ';
{Установка фильтра по дате}
Case rgFilter.ItemIndex of
0: begin
TmpDateFilter:=' and data_sd between '''+DateToSTr(dEdtFrom.date)+''' and '''+DateToSTr(dEdtTo.date)+'''';
TmpDateTitle:='За период с '+DateToSTr(dEdtFrom.date)+' по '+DateToSTr(dEdtTo.date)+';';
end;
1: begin
TmpDateFilter:=' and Extract(month from data_sd)='+IntToSTr(cmbMonth.ItemIndex+1)+' and Extract(year from data_sd)='+IntToSTr(sEdtYearM.AsInteger);
TmpDateTitle:='За '+cmbMonth.Text+' '+inttostr(sEdtYearM.AsInteger)+' г.';
end;
2: begin
TmpDateFilter:=' and Extract(year from data_sd)='+IntToSTr(sEdtYear.AsInteger);
TmpDateTitle:='За '+inttostr(sEdtYearM.AsInteger)+' г.';
end;
3: begin
TmpDateFilter:='';
TmpDateTitle:='За весь период';
end;
end;
{Фильтр по контрагенту}
if LblKlName.Tag>0 then
begin
TmpKlFilter:=' and num_kl='+Inttostr(LblKlName.Tag)+' ';
tmpKlTitle:=', по котрагенту : '''+LblKlName.Caption+'''';
end
else
begin
TmpKlFilter:='';
tmpKlTitle:='';
end;
{ANALIZ}
BtnExcel.Enabled:=False;
BtnExcel.Caption:='экспорт...';
Application.ProcessMessages;
jrn:=cmbJrn.ItemIndex;
With dmReport.qrRepExpr do
begin
dmSklad.TmpSkladTransac.Commit;
SQL.Clear;
SQL.Add('SELECT count(*) FROM '+TmpFinalJrn[Jrn]+'1 ');
SQL.Add('WHERE isActive=1 and '+TmpFinalJrn[Jrn]+'1.flag=1'+' '+TmpDateFilter+TmpKlFilter+TmpKatFilter+' order by '+TmpFinalJrn[Jrn]+'1.id');
dmSklad.TmpSkladTransac.StartTransaction;
Open;
tmpRepRecs:=Fields[0].AsInteger;
// tmpSelFields:='id,data_sd,data_val,name_doc,name_acc,name_kl,sum_sd,sum_skd,sum_ndc';
SQL.Clear;
SQL.Add('SELECT '+tmpSelFields+' FROM '+TmpFinalJrn[Jrn]+'1 ');
SQL.Add('WHERE isActive=1 and '+TmpFinalJrn[Jrn]+'1.flag=1'+' '+TmpDateFilter+TmpKlFilter+TmpKatFilter+' order by '+TmpFinalJrn[Jrn]+'1.id');
Open;//Здесь и выдается ошибка при обращении на удаленный сервер
end;
BtnExcel.Enabled:=True;
BtnExcel.Caption:='Ñôîðìèðîâàòü';
Application.ProcessMessages;
If dmReport.qrRepExpr.IsEmpty then
begin
Showmessage('Нет данных для экспорта !!!');
dmReport.qrRepExpr.Close;
exit;
end;
Application.ProcessMessages;
{Export ту Эксел}
xl:=CreateOleObject('Excel.Application');
xl.Workbooks.add;
For i:=1 to tmpRepRecs do
begin
For j:=1 to dmReport.qrRepExpr.FieldCount do
begin
xl.cells[i,j]:=dmReport.qrRepExpr.Fields[j-1].AsVariant;
end;
dmReport.qrRepExpr.next;
end;
Xl.Columns.AutoFit ;
Xl.Visible:=true;
BtnExcel.Enabled:=True;
BtnExcel.Caption:='В Excel';
end;
vv_fran (2004-09-25 16:14:00) [1]А ты не пользуйся OLE. У меня тоже все виснет и ломается, если через ОЛЕ пытаюь вытащить в Ексель более 3000 записей. Глючит он не по детски. Или через DDE, а проще всего - через компонент EhGrid, и быстрей и без всяких глюков.