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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.008 c
1-20612
Opera
2003-07-24 13:46
2003.08.07
ini


6-20644
mod
2003-06-02 08:39
2003.08.07
Чат на WinSock


14-20669
Dimaxx
2003-07-22 01:21
2003.08.07
Скорости у CD-ROM


1-20511
Silver_
2003-07-24 10:16
2003.08.07
Обратная операция SetLength(MyArray, 10)


1-20601
starik30
2003-07-24 13:20
2003.08.07
Создание компонента





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