Главная страница
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.068 c
3-1081679405
Крутыш
2004-04-11 14:30
2004.04.11
Не работает скроллинг!!!


3-1079008357
Uran
2004-03-11 15:32
2004.04.11
Как извлечь данные из интербейсовской базы данных?


1-1079950125
Эдуард
2004-03-22 13:08
2004.04.11
Как в disign-time е отловить факт изменения размеров формы?


8-1071933751
Ianus
2003-12-20 18:22
2004.04.11
сравнение звуков


1-1080221790
raptorus
2004-03-25 16:36
2004.04.11
Подскажите где можно найти компонеты JEDI?