Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

проблема с АДО и TFileStream   Найти похожие ветки 

 
nika_ufc ©   (2004-04-13 21:29) [0]

проблема с АДО и TFileStream.

у меня такая проблема.
С помощью АДО я хочу из базы сделать рапорт (из Oracle). рапорт должен бить в формате .txt. Connection делаю через АДО.

procedure TForm1.Button1Click(Sender: TObject);
var MyFileW:TFileStream;
   i:integer;
begin
if not ADOConnection1.Connected then
begin
 MessageDlg("Connect to Database.",mtInformation,[mbOK],0);
 Exit;
end;
ADOQuery1.SQL.Add("Select F042,F002,F004,F049, From XXX.YYY");
ADOQuery1.SQL.Add("Where F002 like ""4%"" and AUDIT_RESULT<>800");
ADOQuery1.SQL.Add("Order By F042");
ADOQuery1.Prepared:=True;
ADOQuery1.Open;
MyFileW:=TFileStream.Create("MyFile.txt",fmCreate);
For i:=0 to ADOQuery1.FieldCount-1 do
begin
 MyFileW.Write(PChar(ADOQuery1.Fields[i].FieldName)^,ADOQuery1.Fields[i].Size); //вот здесь все не так как надо
end;
end;

в Хелп написано это:

procedure caststring;

var
 fs: TFileStream;
const
 s: string = "Hello";
begin
 fs := TFileStream.Create("temp.txt", fmCreate or fmOpenWrite);
 fs.Write(s, Length(s)); // this will give you garbage
 fs.Write(PChar(s)^, Length(s)); // this is the correct way
end;

сами видите что я делаю так же, но в файле записывается вот это : F042       0AF002    &#200;L&#200; &#200;L&#200;  F04CCAACAUDAUD
думаю, дела в PChar, то есть в том что не знаю как корректно записать в фйле. (все поля типа VARCHAR2)

и еще одно (не забудте пожалуйста этот факт разъяснть) когда я закрываю приложение на экран появляется CPU Debugger. в эгзешнике все ОК, но в IDE после закрытия...  

впрочем как уже говорил выскакивает CPU Debugger.  вот и код при закрытие:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if ADOQuery1.Active then
 ADOQuery1.SQL.Clear;
 ADOQuery1.Close;
if ADOConnection1.Connected then
 ADOConnection1.Close;
end;

сапасибо за помощь заранее .


 
Jack128 ©   (2004-04-13 21:51) [1]


> yFileW.Write(PChar(ADOQuery1.Fields[i].FieldName)^,ADOQuery1.Fields[i].Size);
>


> s.Write(PChar(s)^, Length(s));
Это одно и тоже??


 
nika_ufc ©   (2004-04-13 21:58) [2]

>Jack128 ©   (13.04.04 21:51) [1]
>Это одно и тоже??
да у них один и тот же тип -> String.


 
Jack128 ©   (2004-04-13 22:02) [3]


>  [2] nika_ufc ©   (13.04.04 21:58)
У кого у них??? Ты что действительно не видишь, что ADOQuery1.Fields[i].Size и Length(s) нечего общего??

И вообще что бы хочешь сохранить то??? Имена полей??


 
nika_ufc ©   (2004-04-13 22:14) [4]

>И вообще что бы хочешь сохранить то??? Имена полей??
да. но я хочу что длина у этих полей (то есть под ним потом я хочу приписать значения, а эти значения, то есть их длина равен ADOQuery1.Fields[i].Size) был равен ADOQuery1.Fields[i].Size


 
Jack128 ©   (2004-04-13 22:19) [5]

Так и не понял, что те надо, но длинные строки нужно сохранять так

procedure WriteString(Stream: TStream; const s: string);
begin
Stream.WriteBuffer(Length(s), SizeOf(Integer));
Stream.WriteBuffer(PChar(s)^, Length(s));
end;

function ReadString(Stream: TStream): string;
var
len: Integer;
begin
Stream.ReadBuffer(len, SizeOf(Integer));
SetLength(Result, len);
Stream.ReadBuffer(PChar(Result)^, len);
end;


 
nika_ufc ©   (2004-04-13 23:21) [6]

>Jack128 ©   (13.04.04 22:19) [5]
спосибо тебе все ок.
 а как как насчет этого ?
>>
и еще одно (не забудте пожалуйста этот факт разъяснть) когда я закрываю приложение на экран появляется CPU Debugger. в эгзешнике все ОК, но в IDE после закрытия...  

впрочем как уже говорил выскакивает CPU Debugger.  вот и код при закрытие:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if ADOQuery1.Active then
ADOQuery1.SQL.Clear;
ADOQuery1.Close;
if ADOConnection1.Connected then
ADOConnection1.Close;
end;



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.125 c
1-1080102128
IlyaP
2004-03-24 07:22
2004.04.11
Нехватка памяти


1-1080015761
Balkon
2004-03-23 07:22
2004.04.11
StringGrid и DrawText в onDrawCell.


14-1082033065
Cerber
2004-04-15 16:44
2004.04.11
спонсоры


7-1080036182
Victor!
2004-03-23 13:03
2004.04.11
Обмен данными по модему


11-1068801575
Deimos
2003-11-14 12:19
2004.04.11
Проблема с потоками