Форум: "Базы";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];
ВнизПару вопросов по сохранению информации из 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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.011 c