Владимир_ |
Отправлено: 15.10.2003, 15:06 |
|
Не зарегистрирован
|
Создаю поле счетчика в базе данных MS Access:
Tabl->TableType = ttDefault;
Tabl->FieldDefs->Clear();
TFieldDef *pNewDef;
pNewDef = Tabl->FieldDefs->AddFieldDef();
pNewDef->Name = "ID";
pNewDef->DataType = ftAutoInc;
pNewDef = Tabl->FieldDefs->AddFieldDef();
pNewDef->Name = "Name";
pNewDef->DataType = ftString;
pNewDef->Size = 40;
Tabl->CreateTable();
Вопервых определение TableType для Access в документации не нашел.
Создается таблица, но поле ID просто integer.
Как быть? |
|
Admin |
Отправлено: 15.10.2003, 19:55 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Нашел вот что:
QUOTE |
Зарезервированных слов для этого типа данных в MSAccess два: COUNTER(нач_значение, шаг) и IDENTITY(нач_значение, шаг).
Но настоятельно рекомендую отказаться от их использования -- будут проблемы при попытке переноса базы на серверную платформу.
|
Проверил — вот так работает:
CODE |
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Query1->SQL->Clear();
Query1->SQL->Add("CREATE TABLE \"MyTable\" (ID COUNTER(0,1),");
Query1->SQL->Add("Name CHAR(50),");
Query1->SQL->Add("PRIMARY KEY(ID))");
Query1->ExecSQL();
Query1->SQL->Clear();
Query1->SQL->Add("Insert into \"MyTable\" (Name) values('Kolia')");
Query1->ExecSQL();
Query1->SQL->Clear();
Query1->SQL->Add("Insert into \"MyTable\" (Name) values('Sasha')");
Query1->ExecSQL();
Query1->SQL->Clear();
Query1->SQL->Add("Insert into \"MyTable\" (Name) values('Maria')");
Query1->ExecSQL();
Query1->SQL->Clear();
Query1->SQL->Add("Insert into \"MyTable\" (Name) values('Lena')");
Query1->ExecSQL();
}
//------------------------------- |
Поля ID действительно autoinc — все работает.
Как это проделать через Table — не знаю, если попробуете и
получиться — напишите как.
Отредактировано Admin — 15/10/2003, 21:02
|
|
Владимир_ |
Отправлено: 15.10.2003, 22:17 |
|
Не зарегистрирован
|
Спасибо.
У меня тоже только через Query1->SQL получается, а как выше — нет.
Но появилась очередная проблема — как быть с значением по умолчанию для созданного поля? Пробовал так:
Query1->SQL->Add("Name CHAR(50) DEFAULT='саша',"); — ругается.
Похоже у Access свой SQL-синтакс. Не подскажите, где его взять?
Как исправить? |
|
** pasha |
Отправлено: 16.10.2003, 20:32 |
|
Не зарегистрирован
|
Увы.
http://www.sql.ru/forum/actualthread.aspx?...?bid=20&otid=55
QUOTE |
Их надо заново указать в соответствующем свойстве TField |
---
|
|
Владимир_ |
Отправлено: 17.10.2003, 16:36 |
|
Не зарегистрирован
|
Появилась другая проблема работы с фильтром в Access:
Если делать так:
Table1->Filtered = false;
Table1->Filter = "ID=1";
Table1->Filtered = true;
то фильтр почему-то не работает.
А вот если так, то все в порядке, но слишком грубо:
Table1->Active = false;
Table1->Filter = "ID=1";
Table1->Filtered = true;
Table1->Active = true;
Это работает, но если после этого добавить строку:
Table1->Filtered = false;
То вылетает ошибка:
Table does not support this operation.
Что делать? Я так понимаю в CBuildere5 есть проблемы при работе через Table.
Опять пробовать через Query1->ExecSQL(); ???
Или может попробовать перейти на базу Visual FoxPro или dBase?
Посоветуйте что лучше сделать?
Я переделываю довольно громоздкую прогу с Paradox — сыпались индексы и вообще что-то интересное с таблицами творилось. Заказчик нервничает...
|
|
Влвдимир_ |
Отправлено: 18.10.2003, 17:03 |
|
Не зарегистрирован
|
Попробовал с базой Visual FoxPro — симптомы теже ...
|
|
Admin |
Отправлено: 18.10.2003, 18:34 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Думаю, что с Access лучше работать через компоненты с вкладки ADO,
без BDE. (и c FoxPro) или для FoxPro через сторонние компоненты
Apollo http://www.hotsoft.ru/VISTA/apollo_vcl.htm
или TDBF http://www.tdbf.net/
|
|
Владимир_ |
Отправлено: 19.10.2003, 15:47 |
|
Не зарегистрирован
|
Спасибо, буду пробовать с Access через ADO... |
|