Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

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

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


 
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));
Это одно и тоже??


 
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.


 
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) нечего общего??

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


 
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


 
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;


 
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;


 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.037 c
1-1082357539
wezz
2004-04-19 10:52
2004.05.09
Не устанавливается StatusBar1.Panels[0].Text


1-1082363352
Bohdan
2004-04-19 12:29
2004.05.09
TDirectoryListBox - Как показать скрытые директории?


14-1081956180
}|{yk
2004-04-14 19:23
2004.05.09
IBExpert Forms


14-1082003944
WondeRu
2004-04-15 08:39
2004.05.09
Кредит на образование!Что? Где? Почем?


3-1081943885
Виктор
2004-04-14 15:58
2004.05.09
Stored Proc





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский