Главная страница
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.05 c
11-1068747888
miek
2003-11-13 21:24
2004.04.11
Отличить KOL от VCL


1-1082302900
TechnDreamer
2004-04-18 19:41
2004.04.11
Обработка текста в TRichedit с учетом форматирования


14-1079744422
Dudao
2004-03-20 04:00
2004.04.11
Чистка кода


1-1080161869
wezz
2004-03-24 23:57
2004.04.11
Горячие клавиши


3-1079417798
EvgeniyR
2004-03-16 09:16
2004.04.11
StoredProc через Query