Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с формированием отчета [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, и быстрей и без всяких глюков.


Наверх

Титульная страница Поиск, карта сайта Написать письмо