Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ADO||BDE как создать dbf таблицы 
:(
    Опции темы
Programister0
Дата 6.7.2007, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



немогу создать нормальные dbf файлы 
пробовал пример и bildera с TTable вроде создает таблицу но файла нет
Код

  NewTable->Active = false;
  NewTable->DatabaseName = BDType->Text ;
  NewTable->TableName = TBname->Text;
  NewTable->TableType = TBType->ItemIndex ;
  NewTable->FieldDefs->Clear();

  TFieldDef *NewField;
  for(int i=0;i<fieldCount;i++)
  {
    NewField=NewTable->FieldDefs->AddFieldDef(); // define  field
    NewField->Name     = df[i]->field->Text;
    NewField->DataType = df[i]->type->ItemIndex;
    NewField->Size     = StrToInt(df[i]->size->Text);
  }
  bool CreateIt = (!NewTable->Exists);  //если TBname->Text один и тотже 2 раза  CreateIt==1
  if (!CreateIt)                            
    if(MessageBox(0,"Overwrite table ?","Table Exists", MB_YESNO) == IDYES)
      CreateIt = true;
  if(CreateIt)
    NewTable->CreateTable(); // create the table
  
код работает но файла нет! (никогда неповторяюсь неповторяюсь)

пробовал с помощью ADO
Код

  ADOq->ConnectionString="Provider=MSDASQL.3;"  
                         "Persist Security Info=False;"
                         "Data Source=Файлы dBASE;"
                         "Mode=ReadWrite";
  ADOq->SQL->Add(
"CREATE TABLE "
"TBname_0"  
" ( "  //дальше идут типы полей которые я подобрал
"field_0  byte, " 
"field_1  numeric, "
"field_2  integer, "
"field_3  long, "
"field_4  float, "
"field_5  double, "                //с 0 по 5 - все одинаковые numeric размером 20,5
"field_6  string(10), "           //character(10)
"field_7  char, "                    //character(254)
"field_8  varchar(21), "        //character(21)
"field_9  date"                     //date(8)
" );" 

 таблица создается нормально но проблема в числовых полях numeric размером 20,5 
необходимо задать размер ЧИСЛОВОГО ПОЛЯ
я пробовал :
numeric(n,m) 
numeric(n)
- ошибка в запросе !
может изначально ошибка в ConnectionString или опять вернуться к TTable?
PM MAIL WWW ICQ Skype   Вверх
mutex
Дата 6.7.2007, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 17.10.2004

Репутация: 1
Всего: 3



Попробуйте использовать VFP OLE DB Provider (скачайте от Микрософт) и определения полей на языке Visual FoxPro.
Строка соединения может выглядеть так:
Provider=VFPOLEDB.1;Data Source=C:\DBFTEST\;Mode=ReadWrite;User ID="";Password="";Collating Sequence=MACHINE;DSN=""

Определение структуры таблицы (файла TEST.DBF) так:
CREATE TABLE TEST (
  FCHAR C(20),
  FNUM N(10,3),
  FDATE D,
  FDATETIME T,
  FINTEGER I,
  FLOGIC L,
  FMEMO M(4)
)

Этот SQL оператор можно выполнять через метод Execute Вашего соединения.



PM MAIL   Вверх
Данкинг
Дата 6.7.2007, 22:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Да, коннектимся через VFP провайдер, кидаем AdoQuery и в нём пишем запрос на создание таблицы. На дельфи я делал именно так.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
mutex
Дата 7.7.2007, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 17.10.2004

Репутация: 1
Всего: 3



Если на Дельфи код работает, в чем же проблема на Билдере?
PM MAIL   Вверх
Programister0
Дата 7.7.2007, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



mutex ты следишь за мной 
я сразу и недогнал что ты имел ввиду, пока не вспомнил про dat файлы.
ответ:
  нет ни какого кода(ни в делфи не в билдере), в этом я полуторный ЛАМО
  есть только компоненты из bildera с которыми я немогу разобрваться
  т.к. компоненты bildera и delphi одинаковы(почти) я искал ответы и в разделе delphi
  как выбирать записи из dbf это понятно, как получить их из dat незнаю!
  
сейчас проблема была в том как коректно создавать эти самые dbf-ки 
спасибо за совет с VFP OLE DB Provider все нормально засвистело 
- теперь числовые поля нужного размера получаются!

тема закрыта!
еще раз спасибо.
PM MAIL WWW ICQ Skype   Вверх
Programister0
Дата 7.7.2007, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



блин опять не так,
таблицы создаются нормально и поля нужного размера
но выбирать и добавлять записи можно ТОЛЬКО с помощью того-же 
ADOTable и ADOQuaery другие программы либо выдают лишнее поле типа _NullFlags размером 1 и типом соседнего поля
либо вообще не открывают 
TTable работать с такими файлами отказывается говорит типа: "Corrupt table/index header"

Ещё скачал компоненты degisy data с помощью DsDBF создавал таблицы 
которые нормально работают везде, но опять появилась проблема 
с указанием размера поля (например numeric(8,4)) создаваемой таблицы 
там размер указывается только для строк! может кто то работал с этим компонентом - как размер прописать? 
или
может в ConnectionString для ADO что то не так
я пишу:
Provider=VFPOLEDB.1;Data Source=.;Mode=ReadWrite;User ID="";Password="";Collating Sequence=MACHINE;DSN=""
PM MAIL WWW ICQ Skype   Вверх
mutex
Дата 8.7.2007, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 17.10.2004

Репутация: 1
Всего: 3



Чтобы не было поля _NullFlags, попробуйте добавить фразу "NOT NULL" (без кавычек) в определениях строковых полей - типа "C" (Character).

TTable использует BDE. BDE не умеет распознавать DBF-файлы, имеющие VFP-формат. ADO считается более продвинутой технологией, чем устаревший BDE. Следовательно, работайте спокойно через ADO. smile

Можете в ADO ConnectionString попробовать изменить параметр Collating Sequence на:
Collating Sequence=RUSSIAN
если только VFP-провайдер найдет русскую последовательность сортировки.
Это должно дать независимость от регистра-высоты кириллических букв.

PS. Чем же не устраивает TADODataset?  Если что непонятно, спросите. smile
PPS. Я не встречал ни одного готового компонента, который корректно работает с кириллическими индексами, а также предоставляет возможность полного управления DBF-файлами.

Это сообщение отредактировал(а) mutex - 8.7.2007, 14:07
PM MAIL   Вверх
Programister0
Дата 8.7.2007, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



В ADO простой запрос 
SELECT * FROM TB 
где в TB ~30,000 записей выполняется 0,3 сек.
в DBE тоже самое за 0,2 сек.
а есть таблицы где ещё больше записей (но там нет счетчика т.к. редко загр-ся)

ещё драйвер ado какойто работает от в зависимости от "погоды" 
то нормально то "cannot load driver" перезапускаю проект опять нормально.

и видимо этот VFP OLE DB Provider должен быть на машинах где будут использоваться его dbf-ки,
что возможно будет накладно.
PM MAIL WWW ICQ Skype   Вверх
mutex
Дата 8.7.2007, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 17.10.2004

Репутация: 1
Всего: 3



С оптимизацией, конечно, надо разбираться. По умолчанию ADO просчитывает всю таблицу сразу в память. Поэкспериментируйте свойствами BlockReadSize, CacheSize и MaxRecords. 

Видимо, BDE читает только начальные записи таблицы, чтобы заполнить сетку-грид, а потом делает подкачку по необходимости. Кстати, если хотите остаться в среде BDE, воспользуйтесь компонентами Halcyon, где можно создавать DBF-файлы для Dbase3 или Dbase4. 

Провайдер VFP надо ставить везде, но BDE - тоже ведь надо. Причем размеры BDE больше.
 
> то "cannot load driver" перезапускаю проект опять нормально
Что-то установлено криво. Переустановите MDAC и VFP провайдер. В моей практике провайдер пока что не подводил меня.

PM MAIL   Вверх
Programister0
Дата 8.7.2007, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



действительно если прописывать not null для всех полей _NullFlags пропадает и 
TTable нормально с ними работает, благодарю за совет. 

и на счет BDE тоже верно 
ща буду эксперементировать со скоростью ADO 
может тогда все компоненты и поменяю.
PM MAIL WWW ICQ Skype   Вверх
Programister0
Дата 8.7.2007, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



нет ADO однозначно медленнее BDE.

компоненты Halcyon - для Buildera я не нашел, только для делфи!
если есть такие дай ссылочку.
PM MAIL WWW ICQ Skype   Вверх
mutex
Дата 8.7.2007, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 17.10.2004

Репутация: 1
Всего: 3



Halcyon сделан на Паскале. Но, он должен установиться под Билдером. У Вас какая версия Билдера?
PM MAIL   Вверх
Programister0
Дата 8.7.2007, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



BCB 6 
скачал hlcn696
пробовал ставить он требует package 
а там вообще нет файлов с расширением bpk.
пробовал чегото самостоятельно наваять невыходит.
PM MAIL WWW ICQ Skype   Вверх
mutex
Дата 9.7.2007, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 17.10.2004

Репутация: 1
Всего: 3



И сдался же этот Блиндер. smile

Попробуйте так:
1. создать пакет *.bpk (меню File/New/Other потом package)
2. сохранить его под именем Halcyuon6
2. включить туда все *.pas файлы из Дельфийского dpk-файла
3. в опциях проекта пакета отключить все флаги из Pascal/Messages
4. добавить путь
      $(BCB)\Source\ToolsApi
   в Library Path через Tools/Environment Options/Library

PM MAIL   Вверх
Programister0
Дата 12.7.2007, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 28.5.2007

Репутация: нет
Всего: нет



спасибо mutex,
с твоей помощью и терпением удалось установить компонент.

извиняюсь за долгое молчание - трафик кончился.
вообще щас вроде с ADO подружился теперь там ковыряюсь 
т.к. мне кажется там можно более сложные запросы выполнять чем в BDE.

PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, chipset.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Базы данных | Следующая тема »


 




[ Время генерации скрипта: 0.0623 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.