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

Вниз

Чтение информации из dbf   Найти похожие ветки 

 
ANB ©   (2005-05-19 16:55) [40]


> они дату в строке держат и пустая дата = пустая строка
- ну да, я строки и достаю напрямую из dbf. Кстати, просто читатель не так уж и тяжело пишется. Для ДБФ + МЕМО я писал 3 дня в расслабухе, ну индексы еще можно за 1-6 дней подрубить. Там другое хуже - индексы могут быть разных форматов.


 
Yurisimus   (2005-06-02 09:04) [41]

Я тут натолкнулся на следующий глюк в компоненте TDBF - не могу создать поле типа Float, у него не прописываются Precision и Size, а если без них прописывать, то создается слишком большое число 18 сайз и после запятой 9 знаков, жуть... А мне надо для цены использовать всего лишь float(5,2)... Какие есть нормальные компоненты для работы с *.dbf-ками??? Именно интересует следующие функции:
1) Создание таблицы
2) Создание индексного файла
3) Ну и поддержка хотябы 3 видов полей - string,integer и float
Если кто знает такой компонентик плиз подскажите, а то муторно все это прописывать своими ручками...


 
Anatoly Podgoretsky ©   (2005-06-02 09:19) [42]

Yurisimus   (02.06.05 09:04) [41]
Кто же для денег использует Float :-)
Это надо себя очень не любить.
Float в xBase применяется для очень больших (свыше 18/20 знаков) или малых чисел.
Сам TDbf очень глюкавый компонент, применение оправдано только для простых Embeded систем.


 
Anatoly Podgoretsky ©   (2005-06-02 09:20) [43]

Одна из серьезных проблем это порча таблиц, нарушение стуктуры базы.


 
ANB ©   (2005-06-02 09:26) [44]


> 3) Ну и поддержка хотябы 3 видов полей - string,integer
> и float
таких типов в DBF никогда не было.
Были Char (фиксированная строка), Memo (для длинных строк, но огребаешь проблемы), Number (с фиксированной запятой, хранится в сиде строки) и Date (дата в виде строки). А, еще логическое было. Може чего и пропустил, но флоат и интегер там отсутствовали.
Сомневаюсь, что с такой функциональностью ты найдешь компоненты. Это же получится обычная старая добрая СУБД Fox.


 
Yurisimus   (2005-06-02 09:36) [45]

Анатолию :
Ладно, скажем так - ftCurrency, но и для него не проставляется кол-во знаков после запятой...

ANB : Ну кто же этого не знает, я просто привел как пример общепонятные и общедоступные типы полей, кто знает - поймет...

Здесь также был рассмотрен компонент halcyon, стоит ли вообще тратить на него время или такой же глюкавый как и TDBF???


 
Anatoly Podgoretsky ©   (2005-06-02 09:42) [46]

ANB ©   (02.06.05 09:26) [44]
Тебе не тяжело будет нажать на пробел в колонке Type диалога создания таблицв в Database Desktop?
И нестоит говорить как хранится не представляя сущности.


 
Anatoly Podgoretsky ©   (2005-06-02 09:44) [47]

Yurisimus   (02.06.05 09:36) [45]
FCurrency не поддержан, вместо него есть более мощный тип Number


 
Yurisimus   (2005-06-02 09:50) [48]

Анатолий :
Ну ты все никак не уймешься... :) Для ВСЕХ типов в TDBF невозможно проставить кол-во знаков после запятой...

И все же хотелось бы послушать мнения по теме, то есть запись и чтение данных из DBF, а не слушать препирания друг друга... Есть ли компонент осуществляющий такие функции или все же придется все это прописывать вручную??? :)


 
ANB ©   (2005-06-02 09:51) [49]


> Anatoly Podgoretsky ©   (02.06.05 09:42) [46]
- да чаво там представлять то как хранится. Залез нортоном и посмотрел. Строка там лежит. Нагло для всех полей. Числа тоже строками лежат. Прямо так 1234.50


 
ANB ©   (2005-06-02 09:54) [50]


> Yurisimus   (02.06.05 09:50) [48]
сам писать возмешься ? Дам сырцы по чтению. Запись так себе, но работает без ошибок. Добавление и индексы - делать самому. Создание таблицы - тоже, но это, имхо, не трудно. (Просто грамотно описать заголовок и запихать в файл, структура файла есть) Индексы я сроду не пытался делать - влом было.


 
Anatoly Podgoretsky ©   (2005-06-02 10:01) [51]

ANB ©   (02.06.05 09:51) [49]
Модифицированый BCD формат, а даты в System Date Format SDF


 
Yurisimus   (2005-06-02 10:10) [52]

ANB :
Да я уже в принципе начал, подрубился через ADO, чтобы была возможность выполнять SQL запросы использовал Query. Да и с типом Float разобрался при создании таблицы, правда для этого сначала сбацал файл MS Excel, а уж потом сохранил его как *.dbf... Дальше проще, просто выполнять SQL запросы и все... привожу пример из проги, хотелось бы проще при использовании TDBF, примерно так:
   (прописал функции (GetMyDir и GetMyFile) на разделение пути и файла)
   Dbf1.FilePathFull:=GetMyDir(SaveDialog1.FileName);
   Dbf1.TableName:=GetMyFile(SaveDialog1.FileName);
   Dbf1.FieldDefs.Add("id",ftInteger);
   Dbf1.FieldDefs.Add("name",ftString,100);
   Dbf1.FieldDefs.Add("price",ftCurrency,(5,2)); //вот это поле и не создается...с ftFloat тоже не работает...
   Dbf1.FieldDefs.Add("edizm",ftString);
   Dbf1.FieldDefs.Add("srok",ftString,10);
   Dbf1.FieldDefs.Add("norma",ftInteger);
   Dbf1.FieldDefs.Add("proizvod",ftString,50);
   Dbf1.FieldDefs.Add("firma",ftString,50);
   Dbf1.CreateTable;

А вот через ADO и Excel:

 qrXLTo.Close;
 connXLTo.Close;
 if dlgSaveXL.Execute then
 begin
   {Create XLS File}
   MyExcel:=CreateOleObject("Excel.Application");
   MyExcel.WorkBooks.Add;
   MyExcel.WorkBooks[1].WorkSheets[1].Name:="Analiz";
   MyExcel.Cells[1,1]:="id";
   MyExcel.Cells[1,2]:="name";
   MyExcel.Cells[1,3]:="price";
   MyExcel.Cells[1,4]:="edizm";
   MyExcel.Cells[1,5]:="srok";
   MyExcel.Cells[1,6]:="norma";
   MyExcel.Cells[1,7]:="proizvod";
   MyExcel.Cells[1,8]:="firma";
   MyExcel.Cells[2,1]:="0";
   MyExcel.Cells[2,2]:="abcd";
   MyExcel.Cells[2,3]:=1.23;
   MyExcel.Cells[2,4]:="abcd";
   MyExcel.Cells[2,5]:="abcd";
   MyExcel.Cells[2,6]:="abcd";
   MyExcel.Cells[2,7]:="abcd";
   MyExcel.Cells[2,8]:="abcd";
   ColumnRange:=MyExcel.Workbooks[1].WorkSheets[1].Columns;
   ColumnRange.Columns[1].ColumnWidth:=7;
   ColumnRange.Columns[2].ColumnWidth:=100;
   ColumnRange.Columns[3].ColumnWidth:=10;
   ColumnRange.Columns[4].ColumnWidth:=7;
   ColumnRange.Columns[5].ColumnWidth:=10;
   ColumnRange.Columns[6].ColumnWidth:=7;
   ColumnRange.Columns[7].ColumnWidth:=50;
   ColumnRange.Columns[8].ColumnWidth:=50;
   MyExcel.ActiveWorkbook.SaveAs(dlgSaveXL.FileName+".dbf", 11, false, false, false, false);
   MyExcel.ActiveWorkbook.Close(SaveChanges:=True);

   try
     // Нахожу запущенный экземпляр Excel...
     MyExcel:=GetActiveOleObject("Excel.Application");
     // Удаляю чтобы не висел в задачах...
     MyExcel:=0;
   except
   end;

   Dbf1.FilePathFull:=GetMyDir(dlgSaveXL.FileName);
   Dbf1.TableName:=GetMyFile(dlgSaveXL.FileName)+".dbf";
   Dbf1.Active:=true;
   Dbf1.AddIndex("id_idx","id",[ixPrimary]);

Сами видите что если работать через ADO&Excel то получается много писанины, поентому и хотелось бы компонентик найти чтобы двумя строчками все это забацать...



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

Форум: "Базы";
Текущий архив: 2005.07.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.039 c
1-1119340554
Misha Uskov
2005-06-21 11:55
2005.07.11
Кнопки MDIChild при максимизации


1-1118827391
Mortal
2005-06-15 13:23
2005.07.11
Ошибка в USER.EXE. {Волщебство}


1-1118472818
violla
2005-06-11 10:53
2005.07.11
Деление на цело не работает?????????????


1-1119435275
Wpn_
2005-06-22 14:14
2005.07.11
MediaPlayer


8-1110140982
имя
2005-03-06 23:29
2005.07.11
сохранить из Image1 в DLL





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