Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.009 c
14-37370
woffs
2002-12-25 12:00
2003.01.13
Шаблоны, парсеры


14-37383
stas_a
2002-12-25 14:32
2003.01.13
StringGrid с компонентами внутри ячеек


14-37346
deniall
2002-12-24 16:42
2003.01.13
Срочно!!!


6-37262
4x4
2002-11-12 10:48
2003.01.13
TServerSocket.SendText???


1-37066
Алексей П
2003-01-02 22:10
2003.01.13
RunTime Component





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский