Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.07;
Скачать: CL | DM;

Вниз

Создать базу и таблицу в ней.   Найти похожие ветки 

 
RomanRom2 ©   (2003-07-15 15:30) [0]

подскажите, как создать таблицу с полем типа boolean???

базу создаю так:
function CreateDBAccess(strDB: String): boolean;
begin
// создаем базу
Result := False;
AConn_ := TADOConnection.Create(nil);
AComm_ := TADOCommand.Create(nil);
if not FileExists(strDB+".mdb") then
begin
try
try
DBEngine := CreateOleObject("DAO.DBEngine.36");
except
try {For DAO 3.5}
DBEngine := CreateOleObject("DAO.DBEngine.35");
except
raise;
end;
end;
Workspace := DBEngine.Workspaces[0];
try
Workspace.CreateDatabase(strDB+".mdb", dbLangGeneral, dbVersion30);
except
end;
except
end
end
end;


таблицу создаю так:
function CreateTablesAccess(strDB: String): boolean;
begin
//создаем таблицы для данных о пользователях
AComm_.Connection := AConn_;
AConn_.ConnectionString := "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+strDB+".mdb;Persist Security Info=False";
AConn_.Provider := "Microsoft.Jet.OLEDB.4.0";
AConn_.LoginPrompt := False;
AConn_.Mode := cmShareDenyNone;
AConn_.Connected := True;

with AComm_ do
begin
try
TableAccount :="CREATE TABLE account("+
"[accnum]String (20),"+
"[expdate]String (50),"+
"[acctype]String (5),"+
"[bank_id]Integer,"+
"[client_id]String (20),"+
"[acc_id]Integer,"+
"[description]String (100),"+
"[balance]Boolean,"+
"[report]Boolean,"+
"[status]Integer,"+
"[cvv]String (4),"+
"[tarif]Integer,"+
")";
try
CommandText := TablePersAcc;
Execute;
except
end;
except
end;
end;
AConn_.Connected := False;
Aconn_.Free; Acomm_.Free;
end;

при создании этой таблицы с полями balance и report типа boolean вылетает ексцепшн "ошибка систаксиса при определении поля".

таблицы без поля boolean создаются нормально.

че делать то???

и еще, база создается в формате Access 95, как сделать что бы создавалась в формате Access 2002?


 
sniknik ©   (2003-07-15 15:44) [1]

в Access boolean = BIT синонимы BOOLEAN, LOGICAL, LOGICAL1, YESNO

> формате Access 95,
> Workspace.CreateDatabase(strDB+".mdb", dbLangGeneral, dbVersion30);
попробуй другие dbVersion40(97)/50(2000/2002) (посмотри как в константах записано, не найдеш просто ставь цифру 5)


 
RomanRom2 ©   (2003-07-15 16:07) [2]

перепробовал все варианты: boolean, logical, logical1, yesno, bool - результат один и тот же - ошибка систаксиса при определении поля.

может быть это из-за того, что база версии Access 95? может там не было таких типов?

по поводу dbVersion; я не совсем понял, как будет влиять название переменной - толи dbVersion30 (как у меня написано было), толи dbVersion40 (как ты написал), поэтому я просто в процедуру число писал. итак:
2000, 2002: Access 2.0
97: exception "не удается открыть базу данных, созданную в предыдущей версии приложения"
50: exception "ошибочный аругмент"
5: Access 1.0
32: (это как у меня) Access 95
22: Access 2.0
36: Access 95

констант dbVersionXX моя дельфя, во всех опциях установленная по умолчанию, не видит :(


 
RomanRom2 ©   (2003-07-15 16:20) [3]

все, разобрался. ошибка была вот в этой запятой:
"[cvv]String (4),"+
"[tarif]Integer , "+
")";
try


 
sniknik ©   (2003-07-15 16:28) [4]

> перепробовал все варианты: boolean, logical, logical1, yesno, bool - результат один и тот же - ошибка систаксиса при определении поля.

это же синонимы! главное BIT.

> по поводу dbVersion; я не совсем понял, как будет влиять название переменной - толи dbVersion30
....
должно быть или dbVersion40 или dbVersion50 (или без нуля или другое (10/11), не помню и смотреть не хочется)
делай так, гораздо проще

function TDMod.CreateMDBBase(BaseName: string): boolean;
var AdoEngine: Variant;
begin
try
AdoEngine:= CreateOleObject("ADOX.Catalog");
AdoEngine.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+BaseName+";Jet OLEDB:Engine Type= 5;");
AdoEngine.ActiveConnection.Close;
AdoEngine:= Null;
result:= true;
except
on E: Exception do DoIfError(E.Message);
end;
end;




 
RomanRom2 ©   (2003-07-15 16:53) [5]

хммм... если создавать базу таким образом, почему-то не создаются таблицы моим способом, вылетает с access violation...
но база создается Access 2000 :)
может есть че по проще, как создавать таблицы? :)


 
sniknik ©   (2003-07-15 17:02) [6]

> может есть че по проще, как создавать таблицы? :)
проще sql-евского create table не бывает
поменяй в запросе все синонимы на родные
осталось одно (если bit уже поставил)
String = CHAR

и зарезервированные слова типа account в кавычках ставь [].



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

Текущий архив: 2003.08.07;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
9-20376
VitGun
2003-02-09 16:32
2003.08.07
Drawrotate в delphiX


3-20394
Alex_x
2003-07-16 10:24
2003.08.07
Как в BeforeDelete отменить процес удаления


7-20827
h-sargis
2003-05-27 20:30
2003.08.07
Как создать программудля редактирования параметров реестра


4-20848
iNew
2003-06-05 09:59
2003.08.07
Прогресс копирования файлов в SHFileOperation


3-20398
{bas}
2003-07-15 17:37
2003.08.07
XML, как БД