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

Вниз

Пару вопросов по сохранению информации из DataSet...   Найти похожие ветки 

 
Paul777   (2002-11-30 15:34) [0]

У меня такая проблема: я не знаю, как сохранить информацию из DATAset" а в табличный файл. Может етого и не нужно делать(то есть файл базы данных *.gdb можно прочитать какой то программой, но например Access его не понимает...) Единственное, что мне подсказали - качать информацию из МЕМО, а потом сохранять уже как текст... Но ведь это уже не таблица, да и код такого скачивания - плохой, потому что информация из последнего поля всегда пишеться с новой строки, не пойму почему... А если поставить вцыкле to DataSource1.DataSet.Fields.Count + 1, то ошибка, мол невозможно большое количество полей, помогите пожалуйста:
Memo1.Clear;
DataSource1.DataSet.First;
while not DataSource1.DataSet.Eof do
begin
s := "";
for i := 0 to DataSource1.DataSet.Fields.Count - 1 dos := s + " " + DataSource1.DataSet.Fields[i].AsString + " " + " ";
if 0 <> Length(s) then
Delete(s, Length(s), 1);
Memo1.Lines.Add(s);
DataSource1.DataSet.Next;
Application.ProcessMessages;
end;
if SaveDialog1.Execute then begin
Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;


 
Prooksius ©   (2002-11-30 15:51) [1]

Открой простой текстовый файл и работай с ним.

...
F1: TextFile
...
AssignFile(F1, "MyFile.txt");
Rewrite(F1);
Append(F1);
while not DataSource1.DataSet.Eof do begin
s := "";
for i := 0 to DataSource1.DataSet.Fields.Count - 1 do s := s + " " + DataSource1.DataSet.Fields[i].AsString + " " + " ";
//
Writeln(F1, s);
end;
Flush(F0);
CloseFile(F1);

Примерно так, если чего напутал, см. доку.


 
Germes ©   (2002-11-30 22:38) [2]

Спасибо, конечно за совет сохранять все в файл - но в принцыпе разницы то нет, но интерфейс у юзера будет получше, если сохранять как МЕМО, ведь с помошью комон диалога он сможет сам вибирать директорию, в которую все это писать… Ну это неважно… Проблема в другом… Как с МЕМО, так и с твоим файлом при записи информации содержимое первых записей полей пишеться в строку, а последней записи - на новую строку. Что бы стало понятно приведу пример: у меня есть четыре записи(тут поля - неподчеркнуты, а значение записей етих полей - подчеркнути): Date: 30.11.2002; Number: 777; Text: proga; Adress: dudar_pasha@rambler.ru. При сохранении все сохраниться в такой файл:
30.11.2002 777 proga
dudar_pasha@rambler.ru
Как видите, информация последней записи всегда пишется с новой строки, как это устранить??? Уже довольно долго мучаюсь, и с цыклом извращался, и впихивал в цыкл всякое - но никак не получаеться, буду очень благодарен, если поможете! А на каком примере - на файле, как подсказал коллега, или через МЕМО сохранять - это уж неважно.


 
Prooksius ©   (2002-12-01 10:08) [3]

Вообще-то не должно быть так.
А чем ты смотришь? Может у тебя просто в просмотрщике посл. поле переводится, т.к. вся строка длинная и не помещается в просмотр.
Еще приходит в голову, м.б. у тебя в последнем поле в начале есть символы перевода строки (#0D и #0A)


 
Germes ©   (2002-12-01 11:06) [4]

Да нет, символа нет и смотрю я обычным Вордом, или бюлокнотом, или Екселем - везде один и тот же прикол... А символа перевода строки там нет. Может все таки в цыкле проблема?


 
Germes ©   (2002-12-01 11:08) [5]

К стати, у тебя есть идеи по поводу того, что нельзя прочитать просто файл *.gdb какой то прогой, ведь в етом файле и есть всякие изменения, и уже в виде таблицы...


 
Prooksius ©   (2002-12-01 15:35) [6]

Вот работающая процедура для вывода Dataset в файл - никаких переходов последнего поля на другую строку нет.

procedure SaveDSToFile;
var
F1: TextFile;
s: string;
i: integer;
begin
AssignFile(F1, "MyFile.txt"); // пишешь нужные имя и путь к файлу
Rewrite(F1);
Append(F1);
DataSet.First;
while not DataSet.Eof do begin
s := "";
for i := 0 to DataSet.Fields.Count - 1 do
s := s + DataSet.Fields[i].AsString + " ";
Writeln(F1, s);
DataSet.Next;
end;
Flush(F1);
CloseFile(F1);
end;

В *.gdb таблицы не хранятся в табличном виде. Кто тебе сказал такое? Хочешь конвертнуть *.gdb в *.mbd? Пользуйся datapump-ом.


 
Germes ©   (2002-12-08 12:11) [7]

Я понял, почему происходит переход последнего поля на другую строку: все дела в том, что домен расчитан на 250 символов create domain dom_adress as Char(250); Ну а текстоввый редактор соответственно перебрасывает такую строку на новую. А нельзя оли в IB6 сделать динимический домен, который мог бы изменяться до 250 символов, в зависимости от обьема поля?


 
Germes ©   (2002-12-08 13:11) [8]

К стати можно сделать и по другому: изменять не сам домен, а строку s. Вот по етому и появился еще вопрос: как вписать в твою прогу цыкл, чтобы он заменял два пробела на один и выполнялся до тех пор, пока не остануться растояния только по одному пробелу? Вот, что я сделал:
AssignFile(F1, "MyFile.txt");
Rewrite(F1);
Append(F1);
while not DataSource1.DataSet.Eof do begin
s := "";
for i := 0 to DataSource1.DataSet.Fields.Count - 1 do s := s + " " + DataSource1.DataSet.Fields[i].AsString + " ";
for i:= 1 to length(s) do if s[i] = " " then s[i]:= " ";
Writeln(F1, s);
end;
Flush(F1);
CloseFile(F1);


 
Prooksius ©   (2002-12-08 20:37) [9]

>Germes © (08.12.02 12:11)
В домене надо использовать VarСhar вместо Char.


 
Germes ©   (2002-12-08 23:36) [10]

Это не решает проблшемы... Увы. А если писать в таблицах Парадокс, то потом эти таблицы можно будет прочитать Екселем? Если нельзя, то подскажи где именно стоит писать базу данных. А то создавать макрос в Ворде - я не умею, да и заказчик сказал, что нужна таблица...


 
Prooksius ©   (2002-12-09 10:18) [11]

Насколько я помню, Ексель читает парадоксовские базы. А ты сам попробуй - и узнаешь :)


 
Diouzshev   (2002-12-09 20:18) [12]

См
http://www.maxcomponents.net/
TmxNativeExcel
Насколько я знаю он умеет датасет в Excel кидать...
А для обрезки пробелов используй Trim() (см также TrimLeft, TrimRight)


 
Diouzshev   (2002-12-09 20:20) [13]

и вообще, хочет заказчик видеть все в табличном виде, пусть ставит себе IBExpert и обсмотрится!


 
Germes ©   (2002-12-12 23:11) [14]

Хорошо, а как тогда сохранить информацию из DataSet" а, в табличном виде? То есть, что б потом юзер мог без всяких проблем прочитать етот файл Екселем. Я могу конечно цыклом скачивать информацию из базы данных, и заганять ее в МЕМО, но тогда это будет текстовая информация, а нужно, что бы сразу все шло в таблицу, и создавался табличный файл, который можно потом будет прочитать Екселем, или Аксес. И вообще то я думал раньше, что с етим проблем не будет, я считал, что файлы баз данных Аксес и так понимает… К сати, что это за IBExpert, и сколько он занимает места?


 
Сергєєв Володимир   (2002-12-12 23:46) [15]

На фиг тебе информация из датасета?

Возьми EhLib (DBGridEh), у него есть функция экспорта данных в форматы txt, html, xls, rtf, csv, Windows clipboard. При чем не только всех данных, а например (параметр функции экспорта TRUE/FALSE) выделенного фрагмента. При этом данные импортируются вместе с форматированием (например, если у грида бакгроунд желтый, шрифт зеленый, а заголовки грида синие с фиолетовым шрифтом).
На выходе получишь файл нужного тебе формата в таком виде, как выгладел ДБГрид во время работы твоей программы и пусть себе клинт на него обсмотрится.


 
Germes ©   (2002-12-15 20:30) [16]

Я думаю, что брать новые компоненты - это дурная работа... Ведь Ексель читает файли *.dbf, подскажите, как сохранять базу данных в Paradox не в формат *.db , а в формате *.dbf, и тогда проблема будет решена. К стати, просто ради интереса, откуда я могу скачать DBGridEh, всю эту библиотеку? Она входит в СD с Делфи?


 
Matolch ©   (2002-12-15 22:18) [17]

Excel, по крайней мере XP, оччень даже легко открывает *.db


 
Sergey13 ©   (2002-12-16 11:23) [18]

Читал-читал и ни.. чего не понял 8-).
Во первых Paul777 и Germes © это один человек или 2? 8-)

2Paul777 и Germes ©
>как сохранить информацию из DATAset" а в табличный файл
Зачем ее сохранять отдельно, если она уже есть в базе, и что такое табличный файл - форматированый текстовый или например екселевский?

>Может етого и не нужно делать
Может и так? Даже скорее всего. 8-)

>файл базы данных *.gdb можно прочитать какой то программой
Даже наверняка не одной, можно даже своей собственной.

> но например Access его не понимает
И даже тупой Оракл не поймет 8-)

>Единственное, что мне подсказали - качать информацию из МЕМО, а потом сохранять уже как текст
Кто подсказал? Так ты можешь таки качать информацию - как? В МЕМО - так это и программа то твоя значит, раз ты мемо компоненты добавляешь? Тогда чем не нравится грид - таблица которую твой заказчик может лицезреть воочию сколько угодно.

В чем вообще проблема то? Ты чем вообще занимаешься? Зачем качать инфу из одной бызы в другую или еще куда то, чтобы посмотреть ее в табличном виде?


 
Germes ©   (2002-12-18 23:57) [19]

Господа программисты, все гораздо проще. Проблема была в том, что я не мог открыть Екселем базу данных. Сначала я писал базу на Интербейсе, который хранит данные не в табличном выиде - отпадает... Потом на Парадоксе, там ети дурные файлы *.db, которые Ексель тоже не понимает. Наконец то до меня дошло: нужно написать базу данных на dBase, и хранить данные в файле базы данных - *.dbf, который уже с легкостью можно читать екселем. Остался нерешенным у меня один вопрос: скажите, пожалуйчто именно нужно, что бы программа работала на компе, где нет Делфи. Я так предполагаю, что нужна моя программа и BDE Administrator, больше ничего не нужно? Заранее благодарен. К стати, Germes и Paul777 - это один человек, хотя по моему в интернете - пофиг.


 
Наталия ©   (2002-12-19 06:12) [20]

В орешник. Однозначно. :)



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

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

Наверх




Память: 0.53 MB
Время: 0.013 c
3-36941
stoper
2002-12-17 21:31
2003.01.13
DBGrid


4-37447
SemFLY
2002-11-23 22:32
2003.01.13
Ловушка WH_Keyboard…


14-37348
Дмитрий К.К.
2002-12-24 13:54
2003.01.13
Несовместимая версия заглушки RPC


1-37082
qwerty2
2003-01-03 16:32
2003.01.13
Как управлять с клавиатуры компонентом TRadioGroup?


8-37227
Dick
2002-09-24 19:46
2003.01.13
Алгоритм