Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

MSAccess [D6, MSAccess]


BAYES ©   (2004-03-14 16:49:00) 

Привет!
Пытался сам разобраться с ADOX, но что-то вяло идет, а проблема стоит и кажись будет стоять.
Мне необходимо в существующую БД (db.mdb), добавить таблицу "kontr" и в нее 3 поля (id-ключевое,счетчик,случайный,a-текстовы.100,b-текстовы.100).
Создавал запросом create table kontr (id integer...), все создавалось, id был ключевым, но не счетчик и т.д.
Затем пошел по пути ADOX, вот здесь и грабли. В VB, я не очень,а в ADO210.CHM, все описания именно на нем.


Doomin   (2004-03-22 13:36:00) [1]

Делал по книге Елмановой "ADO в Delphi" и посмотрел в TLB, формируемый из adox (DB - это обычный TADOConnection). Далее можно уже разобраться по аналогии. Я autoinc не использую, давно перешел на GUID в виду большей гибкости и постоянной потребности в репликации

var
 DBC: TCatalog;
begin
 DBC := TCatalog.Create(Self);
 try
 DBC.DefaultInterface.Set_ActiveConnection(DB.ConnectionObject);
   Table := TTable.Create(Self);
 try
   try
     Table.ParentCatalog := DBC.DefaultInterface;
     Table.Name := 'TBL_Currency';
     Table.Columns.Append('ID', adGUID, 0);
     Table.Columns.Append('Name', adVarWChar, 20);
     Table.Columns.Append('LastDate', adDate, 0);
     Table.Columns.Append('Deleted', adUnsignedTinyInt, 0);
     Table.Columns.Item['ID'].Properties['Jet OLEDB:Autogenerate'].Value := True;
     Table.Columns.Item['LastDate'].Properties['Default'].Value := 'Now()';
     Table.Columns.Item['Deleted'].Properties['Default'].Value := 0;
     Table.Keys.Append('IDKey', adKeyPrimary, Table.Columns.Item['ID'], '', '');
     DBC.Tables.Append(Table.DefaultInterface);
   except
     on E: Exception do
       Application.MessageBox(PAnsiChar(format(MsgDBWriteError, [E.Message])), PAnsiChar(MsgError), MB_OK or MB_ICONERROR);
   end;
 finally
   Table.Free;
 end;

 finally
   DBC.Free
 end;  
end


BAYES   (2004-03-15 18:38:00) [2]

Плохиш   (15.03.04 18:19) [8]
Там ты увидиш:
1)Тип данных-Счетчик
2)в сво-х таблицы есть НОВОЕ НАЗНАЧЕНИЯ, вот там можно выбрать, последовательные или случайные.
Все закрыли ветку.


Плохиш   (2004-03-15 18:19:00) [3]

И вообще, BAYES, ты бы слово increment перевёл бы, может и вопросов таких возникать не будет


Плохиш   (2004-03-15 18:17:00) [4]

>BAYES ©   (15.03.04 18:09) [6]

> Открой Access в режиме конструктор, там все и увидишь!

Что и autoincrement случайным образом то же увижу?


BAYES   (2004-03-15 18:09:00) [5]

Плохиш   (15.03.04 13:23) [5]
Ты о каком маразме? Открой Access в режиме конструктор, там все и увидишь! А использование autoincrement-случайного, это мне нужно, последовательное нарастание не приемлемо.


Плохиш   (2004-03-15 13:23:00) [6]

>BAYES ©   (15.03.04 13:04) [4]

> НОВОЕ НАЗНАЧЕНИЕ-ПОСЛЕДОВАТЕЛЬНО), а нужно СЛУЧАЙНО

Хорошо, что создатели баз данных до такого маразма не додумались :-|


BAYES   (2004-03-15 13:04:00) [7]

>>sniknik ©   (15.03.04 10:51) [3]
вот вопрос
Мне необходимо в существующую БД (db.mdb), добавить таблицу "kont" и в нее 3 поля (id-ключевое,счетчик,случайный,a-текстовы.100,b-текстовы.100).
Твой пример делает(id-ключевое,счетчик, НОВОЕ НАЗНАЧЕНИЕ-ПОСЛЕДОВАТЕЛЬНО), а нужно СЛУЧАЙНО


sniknik   (2004-03-15 10:51:00) [8]

> Да ладно тебе глумиться
перестаю, отвечаю на так и не заданный вопрос. (правильное построение запроса в вопрос не входило)
кстати интересно еще утро? еще не опоздал?
ADOCommand.CommandText:=
 'create table kont (id autoincrement primary key, name varchar(50), ...еще 2 поля)';
ADOCommand.Execute;

> И опять не то.
боюсь показатся навязчивым но что именно? не то это не то слово которым изясняются чтобы тебя поняли, вот запутать можно.


BAYES   (2004-03-15 00:21:00) [9]

Да ладно тебе глумиться, нужно от чего-то опираться(отпираться).
Сделал такую туфту
DM.ADOQuery1.SQL.Clear;
DM.ADOQuery1.SQL.Add('create table kont (id integer primary key)');
DM.ADOQuery1.ExecSQL;
DM.ADOQuery1.Close

Все гуд, но одновременно не гуд. Вот и полез в чащебу. Там получилось лучше.
DM.ADOConnection1.Close;
cat:=CreateOleObject('ADOX.Catalog');
tab := CreateOleObject('ADOX.Table');

cat.Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db123.mdb');
tab.name:='kont';
tab.ParentCatalog:=cat;
tab.Columns.Append('id',adInteger,0);//первое поле - счетчик
tab.Columns[0].Properties['AutoIncrement'].Value:= True; //  счетчик
cat.tables.Append(tab);

И опять не то.
JETSQL40.CHM - эту штуку уже изучаю, но вся проблема, результат нужен утром, а до утра не разобраться.


sniknik   (2004-03-14 23:20:00) [10]

крут, не разобрался с простейшими запросами полез в движок... уважаю.

рядом с ADO210.CHM лежит JETSQL40.CHM, не пробовал читать? в связи с create table ....


Наверх

Титульная страница Поиск, карта сайта Написать письмо