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

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

проблема с АДО и TFileStream [D7]


nika_ufc ©   (2004-04-13 21:29:00) 

проблема с АДО и 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_RESULT800');
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    ÈLÈ ÈLÈ  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;

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


nika_ufc   (2004-04-13 23:21:00) [1]

>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;


Jack128   (2004-04-13 22:19:00) [2]

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

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 22:14:00) [3]

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


Jack128   (2004-04-13 22:02:00) [4]


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

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


nika_ufc   (2004-04-13 21:58:00) [5]

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


Jack128   (2004-04-13 21:51:00) [6]


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


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


Наверх

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