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

Вниз

Где объявлен тип TADOXCatalog?   Найти похожие ветки 

 
gedevan   (2015-11-30 22:28) [0]

Пытаюсь программно создавать базу данных Access, нашел мануалы, курю, но все что об этом написано датируется где то 2001-2003 годами. Похоже с тех пор что-то поменялось и я не могу объявить переменную типа TADOXCatalog, т.к. непонятно где этот тип описан. в ADODB его нет, в OLE DB тоже.

Делфи xe5

нашел еще такой вариант:


function CreateAccessDatabase(FileName: string): string;
var
    cat: OLEVariant;
begin
  Result := "";
        try
         cat := CreateOleObject("ADOX.Catalog");      
         cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FileName + ";");    
         cat := NULL;
       except on e: Exception do
      Result := e.message;
      end;
end;


но вот первый мне как то больше нравится, и потом по нему хотя бы документация есть )

как быть?


 
sniknik ©   (2015-11-30 22:58) [1]

> непонятно где этот тип описан.
https://msdn.microsoft.com/en-us/library/ms678060%28v=vs.85%29.aspx
в дельфе его нет (d7 и меньше, выше х.з. но вряд ли)


 
gedevan   (2015-12-01 01:17) [2]

пишут что в ранних версиях делфи можно было как то сгенерировать включить в проект adox_tlb.pas, а в xe5 эта возможность сохранилась и как ее реализовать?


 
gedevan   (2015-12-01 04:35) [3]

нашел файл в интернете и скачал. Возникла проблема


const
  BaseName =   "c:\data\demo.mdb";
  DS          =   "Provider=Microsoft.Jet.OLEDB.4.0;Data    Source="+BaseName;
 
  var
  Catalog   : TADOXCatalog;
 
  ...
 
  // Создать экземпляр объекта ADOX Catalog
  Catalog   := CoCatalog.Create;
  // Если база данных существует, удалим ее
  If FileExists(BaseName) Then DeleteFile(BaseName);
  // Создадим новый MDB-файл
  Catalog.Create(DS);
  // Укажем активное соединение
  Catalog._Set_ActiveConnection(DS);
  ...


В мануале такой вот код. Но компилятор ругается на строчку Catalog   := CoCatalog.Create;

т.к. каталог объявлен как TADOXCatalog, а CoCatalog.Create возвращает тип _Catalog.

И ладно так было бы только тут, но точно такая же беда и с таблицами и со всеми остальными объектами метаданных, похоже тут кроется какой то прием программирования о котором я ничего не знаю, просьба меня просвятить.

Или этот компонент нужно зарегистрировать как пакет? а если я не хочу как пакет, хочу просто как модуль...


 
gedevan   (2015-12-01 07:13) [4]

нашел в xe5 как этот файл импортировать/сгенерировать. Версию 6.0 сгенерировал. Пытаюсь ему скормить это:


procedure Button3Click();
const
 BaseName = "c:\demo.mdb";
 DS = "Provider=Microsoft.Jet.OLEDB.4.0;Data    Source=" + BaseName;

var
 Catalog: _Catalog;
 Table  : _Table;
 Column :_Column;
begin

 // Создать экземпляр объекта ADOX Catalog
 Catalog := CoCatalog.Create;
 // Если база данных существует, удалим ее
 If FileExists(BaseName) Then
   DeleteFile(BaseName);
 // Создадим новый MDB-файл
 Catalog.Create(DS);
 // Укажем активное соединение
 Catalog._Set_ActiveConnection(DS);

 // ШАГ 1
 // Создать новый экземпляр объекта Table
 Table := CoTable.Create;
 // Give it the name
 Table.Name := "Customers";
 // И определить Catalog, к которому он принадлежит
 Table.ParentCatalog := Catalog;
 // ШАГ 2
 // Создать новый экземпляр объекта Column
 Column := CoColumn.Create;
 With Column do
 begin
   ParentCatalog := Catalog;
   // ШАГ 3
   // Установить свойства
   Name := "CustID";
   Type_ := adInteger;
   Properties["Autoincrement"].Value := true;
   Properties["Description"].Value := "Customer    ID";
 end;
 // ШАГ 4
 // Добавить поле к коллекции Columns объекта Table
 Table.Columns.Append(Column, 0, 0);
 Column := Nil;
 // ШАГ 5
 // Создать несколько объектов Columns и добавить их к объекту Table
 With Table.Columns do
 begin
   Append("FirstName", adVarWChar, 64);
   Append("LastName", adVarWChar, 64);
   Append("Phone", adVarWChar, 64);
   Append("Notes", adLongVarWChar, 128);
 end;
 // ШАГ 6
 // Добавить объект Table в коллекцию Tables объекта Catalog
 Catalog.Tables.Append(Table);
 Catalog := Nil;
end;


а он мне в строке Catalog.Create(DS); говорит:
Невозможно найти устанавливаемый ISAM

тогда я пишу
DS = "Provider=Microsoft.Jet.OLEDB.12.0;Data    Source=" + BaseName;

а он мне выдает тогда что класс не зарегистрирован...что это?

Функция вызывается какая то внешняя я так понял и ничего посмотреть нельзя что там происходит ( Офис 2007 установлен, но без аксесса. А чтобы базу эту юзать офис нужен обязательно?


 
gedevan   (2015-12-01 07:20) [5]

убрал лишние пробелы в DS = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + BaseName;

файл создался.....4.0 это максимальная сейчас? а говорят 12.0 это чего тогда?


 
sniknik ©   (2015-12-01 10:23) [6]

для 12й нужно устанавливать датабейсенжайн, они многое поменяли, а не просто версию... так он не не включен в установку винды, у него другое расширение... еще что-то.


 
sniknik ©   (2015-12-01 10:25) [7]

> тогда я пишу
> DS = "Provider=Microsoft.Jet.OLEDB.12.0;Data    Source=" + BaseName;
Provider=Microsoft.ACE.OLEDB.12.0


 
gedevan   (2015-12-01 14:59) [8]


With Table.Columns do
 begin
   Append("jpgSize", adBigInt, 0);
   Append("jpgPosition", adInteger, 0);
   Append("ShotNumber", adInteger, 0);
 end;


тогда 12 не вариант.

Почему оно ругается недопустимый тип на adBigInt? как мне сделать поле, чтобы в него влез int64? и еще а как сделать поле с типом blob?


 
sniknik ©   (2015-12-01 19:00) [9]

не вы...делывайся. используй ADO.


 
gedevan   (2015-12-02 13:30) [10]

не вы...делывайся. используй ADO.

не понял...

Насколько я понял базу можно создать только через ADOX. Просто я только начал разбираться что с ADO, что ADOX.


 
sniknik ©   (2015-12-02 14:06) [11]

ADOX - низкий уровень, работа на уровне полей/индексов по именам/таблиц/базы (в файловом представлении)  и да создать базу у движка не имеющего sql команды CREATE DATABASE можно только через ADOX.

ADO это все тоже самое, но на уровне sql, и более универсально (насколько вообще sql-и у движков сходятся)

по сути ты учишься "кидать батоны" в дельфе но делать это пытаеся на встроенном ассемблере... зачем?
базу создал? (код в 0 похож на рабочий) дальше подключайся и работай с ней с помощью ADO.


 
sniknik ©   (2015-12-02 14:10) [12]

> с помощью ADO.
вот по нему в дельфе и справка, и компоненты и примеры, все есть.


 
gedevan   (2015-12-04 13:42) [13]

procedure CreateBD(const baseName:string);
//const
//  BaseName2 = "c:\demo.mdb";
var
 Catalog: _Catalog;
 ds :string;
begin
 If FileExists(BaseName) Then
   exit;//база уже создана
 DS := "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + BaseName;
 // Создать экземпляр объекта ADOX Catalog
 Catalog := CoCatalog.Create;
 // Если база данных существует, удалим ее
 // Создадим новый MDB-файл
 Catalog.Create(DS);
 // Укажем активное соединение
 Catalog._Set_ActiveConnection(DS);
 Catalog := Nil;
end;


Сделал функцию, находится в отдельном модуле. Добавил этот модуль в 2 проекта. И вот в одном все компилируется и даже работает, а во втором выдает ошибку при компиляции на строку Catalog._Set_ActiveConnection(DS);

[dcc32 Error] SQLWork.pas(49): E2010 Incompatible types: "IDispatch" and "string"

что за бабуйня? как так?


 
sniknik ©   (2015-12-04 13:59) [14]

скорее тип описан в 2х модулях, и по разному... один перекрывает другой по порядку объявления.
пиши так
var
Catalog: ИмяМодуля._Catalog;



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

Форум: "Начинающим";
Текущий архив: 2017.10.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.001 c
2-1449064629
sollip
2015-12-02 16:57
2017.10.29
Abbrevia Xe10 lzma


15-1467236052
K-1000
2016-06-30 00:34
2017.10.29
MD5 из WinAPI


15-1467207680
Pavia
2016-06-29 16:41
2017.10.29
Множественная замена


15-1467235801
Юрий
2016-06-30 00:30
2017.10.29
С днем рождения ! 30 июня 2016 четверг


2-1448911691
gedevan
2015-11-30 22:28
2017.10.29
Где объявлен тип TADOXCatalog?





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