Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Подземелье Магов
  
 

Фильтр по датам

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  18:36[Войти] | [Зарегистрироваться]

Обсуждение материала
Как достать SQL запрос из *.mdb без MS Access
Полный текст материала


Цитата или краткий комментарий:

«... Речь идет о том, что базой данных mdb можно прекрасно пользоваться, не имея MS Office и Access. Все данные, необходимые для хранения и изменения информации можно хранить в mdb базе данных имея Delphi и подключенный ActiveX ADO и ADOX. ...»


Важно:
  • Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
  • Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
  • При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
  • Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.



Добавить свое мнение.

Результаты голосования
Оценка содержания

  Содержит полезные и(или) интересные сведения
[1]450%
 
  Ничего особенно нового и интересного
[2]225%
 
  Написано неверно (обязательно укажите почему)
[3]225%
 
Всего проголосовали: 8

Оценка стиля изложения

  Все понятно, материал читается легко
[1]685.7%
 
  Есть неясности в изложении
[2]114.3%
 
  Непонятно написано, трудно читается
[3]00%
 
Всего проголосовали: 7




Смотрите также материалы по темам:
[MS Access] [Создание/удаление объектов базы]

Комментарии жителей
Отслеживать это обсуждение

Всего сообщений: 23

28-09-2006 01:58
Спасибо автору, за то что он в первом абзаце сразу честно признается - "я - ламер". :) Это снимает вопрос о необходимости читать статью дальше :)


19-01-2004 13:28
Немного не понимаю зачем писать о том что ничего нет, если в справке и MSDN очень подробно описана как создовать уничтожать и изменять запросы и таблицы с использованием ADO и ADOX?


09-01-2004 19:07
Ну да, ведь многое Microsoft добавила именно в 4 версии Jet. Именно, то, что касается SQL. Ведь они заставили Access создавать некое подобие базы данных MS SQL Server.

А насчет пустых значений, так я думаю вот это касается включения пустых полей в индекс: DISALLOW NULL | IGNORE NULL


08-01-2004 20:02
>>>А насчет сжатия - WITH COMPRESSION или WITH COMP
>>>А пустые строки - не указываем NOT NULL

NOT NULL - это не "пустые строки", а "обязательное поле"
к примеру, вопрос на круглом столе
http://www.delphikingdom.com/asp/answer.asp?IDAnswer=10739

WITH COMPRESSION - эх.. давно это было, - года четыре назад, подробностей не помню, но тогда заставить WITH COMPRESSION работать не удалось..
Возможно, из-за старых версий MSJet..
Сообщение не подписано


08-01-2004 19:08
>>> "сжатие UNICODE"
>>> "Пустые строки - Да"

Насчет Default - большое спасибо, уже использовал :-)

А насчет сжатия - WITH COMPRESSION или WITH COMP
А пустые строки - не указываем NOT NULL


08-01-2004 16:08
>>>AlexS
>>>А что именно нельзя через SQL сделать?

Например,
"сжатие UNICODE"
"Пустые строки - Да"

>>> Где же DEFAULT ???

Это "Dynamic Property"

Вот список properties для Column, который предоставляет Jet при работе с Access:

Autoincrement
Default
Description
Nullable
Fixed Length
Seed
Increment
Jet OLEDB:Column Validation Text
Jet OLEDB:Column Validation Rule
Jet OLEDB:IISAM Not Last Column
Jet OLEDB:AutoGenerate
Jet OLEDB:One BLOB per Page
Jet OLEDB:Compressed UNICODE Strings
Jet OLEDB:Allow Zero Length
Jet OLEDB:Hyperlink

Если Вам ничего из этого не надо, пользуйтесь SQL
А ведь ещё есть индексы..
Сообщение не подписано


08-01-2004 12:07
И вот еще все та же ADO API Reference
Где же DEFAULT ???

ADOX 2.8 API Reference  

Column Object Properties, Methods, and Events
Properties/Collections

Attributes Property
DefinedSize Property
Name Property
NumericScale Property
ParentCatalog Property
Precision Property
Properties Collection
RelatedColumn Property
SortOrder Property
Type Property (Column)

Methods
None.

Events
None.

See Also
Applies To: Column Object

© 1998-2003 Microsoft Corporation. All rights reserved.


08-01-2004 12:05
>>> Тем не менее полноценной работы с форматом полей через SQL всё равно не получится.
Для создания/изменения структуры всё-таки лучше пользоваться теми же объектами ADOX.

А что именно нельзя через SQL сделать?


08-01-2004 12:03
>> Create view  222  AS  TRANSFORM
А если Create PROCEDURE 222  AS  TRANSFORM ???

Вот просмотрел я официальную справку по ADO 2.8 на сайте MS игде же свойство Default у Columns ?

ADOX 2.8 API Reference  

ADOX Properties
ActiveConnection Indicates the ADO Connection object to which the catalog belongs.
Attributes Describes column characteristics.
Clustered Indicates whether the index is clustered.
Command Specifies an ADO Command object that can be used to create or execute the procedure.
Count Indicates the number of objects in a collection.
DateCreated Indicates the date the object was created.
DateModified Indicates the date the object was last modified.
DefinedSize Indicates the stated maximum size of the column.
DeleteRule Indicates the action performed when a primary key is deleted.
IndexNulls Indicates whether records that have null values in their index fields have index entries.



04-01-2004 14:51
Странно, когда я писал клиенты на Аsm'e для просмотра/редактирования .mdb, я просто использовал SQL-запросы через ODBC. MS Access не был установлен (собственно, потому и писал свои клиенты)…

Или я что-то не так понял?


03-01-2004 19:08
Материал достаточно интересен. Вышел на стаью, после того ,как стал искать возможность создать
запрос в delphi через ADO:
Create view  222  AS  TRANSFORM Sum(My_ValuesParam.value_parm) AS [value_]
SELECT My_Sprav1.name_firma as [par1]
FROM (My_parametrs INNER JOIN My_ValuesParam ON
My_parametrs.id_parm = My_ValuesParam.id_parm)  
INNER JOIN My_Sprav1 ON My_ValuesParam.id_firma = My_Sprav1.id_firma  WHERE  My_ValuesParam.id_form=1 AND My_ValuesParam.year_='2003'
GROUP BY My_Sprav1.name_firma
PIVOT My_ValuesParam.id_parm in(p1021,p102,p103,p104,p105,p106,p107,p108,p109,p110,p111,p112,p113,p114,p115,p116,p117,p118)
---------
через BDE - этот запрос отрабатывает
через ADO - сообщение : недопустимый синтаксис SQL
ожидаемый элемент: SELECT
Сообщение не подписано


02-01-2004 15:47
Чуть не забыл про "Default":

Table.Columns[1].Properties['Default'].Value := 'C Новым годом!';
Сообщение не подписано


02-01-2004 15:30
>>>CREATE TABLE задать для поля значение по умолчанию. А ведь это поддерживается и работает.

Тем не менее полноценной работы с форматом полей через SQL всё равно не получится.
Для создания/изменения структуры всё-таки лучше пользоваться теми же объектами ADOX.

  Table := CreateOleObject('ADOX.Table');
  Table.ParentCatalog := Catalog; // Catalog из предыдущего примера
  Table.Name := 'MyNewTable';
  Table.Columns.Append('Id'{имя поля},3 {adInteger - тип}, 4 {размер/длина});
  Table.Columns[0].Properties['Autoincrement'].Value := True; // создали счетчик
  Table.Columns.Append('MyTextField', 130 {adWChar}, 64); // создадим текстовое поле длиной 64 символа
  Table.Columns[1].Properties['Nullable'].Value := True; // может быть Null
  Table.Columns[1].Properties['Jet OLEDB:Compressed UNICODE Strings'].Value := True; // "сжатие UNICODE"
  Table.Columns[1].Properties['Jet OLEDB:Allow Zero Length'].Value := True; // "Пустые строки - Да"
  // теперь ключи/индексы  
  Index := CreateOleObject('ADOX.Index');
  Index.Name := 'PrimaryKey';
  Index.PrimaryKey := True;
  Index.Columns.Append('Id'); // это первичный ключ к счетчику Id
  Table.Indexes.Append(Index); // присобачили к таблице

  {Для индексированных полей без ключа - то же самое, только Index.PrimaryKey := False;}
//  Ну и последнее не забыть:

  Catalog.Tables.Append(Table);

Сообщение не подписано


02-01-2004 14:46
>>>Если я использую Views['Name'].Command - пишет - Объект не найден}

Ищите ошибку. Всё это нормально работает, в т.ч. с русскими названиями
Сообщение не подписано


02-01-2004 14:39
>>>Ведь юридически, открывая базу данных и внося в нее данные, я дублирую функциональность Access.

Читайте ещё раз п. 9, примечание.
Сообщение не подписано


02-01-2004 11:00
А вот и сам пример:

Catalog := CreateOleObject('ADOX.Catalog');
  Catalog.ActiveConnection := TDBForm(Owner).ADOConn.ConnectionObject;
{Имя почему-то напрямую не идет. Если я использую Views['Name'].Command - пишет - Объект не найден}
for i:=0 to Catalog.Views.Count-1 do
    if Catalog.Views[i].Name=Value
    then begin
      Memo2.Lines.Add(Catalog.Views [i].Command.CommandText);
      Break;
    end;  
Catalog := Unassigned;


02-01-2004 10:57
Я немножко доработал приведенный пример, и действительно все получается.
Однако, если я правильно понимаю Лицензионное соглашение Майкрософт, то вообще нельзя использовать mdb формат для создания коммерческих приложений, или нужно пробрести лицензию для разработчика.
Ведь юридически, открывая базу данных и внося в нее данные, я дублирую функциональность Access.
Зачем тогда в составе Делфи поставляется ADO.
И зачем ActiveX ADO и ADOX, если всем этим нельзя пользоваться.


02-01-2004 10:19
Ну, я допустим не собираюсь распространять свою программу ни в каком виде, однако для собственных целей она мне пригодится.

var
  Catalog: OleVariant;
...

  Catalog := CreateOleObject('ADOX.Catalog');
  Catalog.ActiveConnection := ADOConnection1.ConnectionObject;
  Memo1.Lines.Add(Catalog.Views[0].Name);
  Memo1.Lines.Add(Catalog.Views[0].Command.CommandText);
  Catalog := Unassigned;

Этот вариант я пробовал по всякому, но ни разу текст не получил. Почему?

Справка по SQL в ACCESS действительно хороша, однако там нигде не сказано, как в CREATE TABLE задать для поля значение по умолчанию. А ведь это поддерживается и работает.


30-12-2003 16:42
>>>Max Gazuko
Обратимся к первоисточникам:
вот цитата из:

ЛИЦЕНЗИОННОЕ СОГЛАШЕНИЕ КОРПОРАЦИИ МАЙКРОСОФТ
Microsoft Jet 4.0 Service Pack 7
....
Корпорация Майкрософт предоставляет вам неисключительное, не требующее дополнительных отчислений право воспроизводить и распространять файлы .DLL продукта (далее <Распространяемые компоненты>) только в виде объектного кода при условии, что вы обязуетесь:
1) не изменять распространяемые компоненты;
2) распространять распространяемые компоненты только совместно и как часть пакета установки созданного вами программного приложения, которое добавляет существенные и основные функциональные возможности к продукту (далее <приложение>);
3) не использовать названия, эмблемы и товарные знаки корпорации Майкрософт для рекламы вашего приложения без предварительного письменного согласия корпорации Майкрософт;
4) правильно переносить на приложение уведомления об авторских правах (ваше или от вашего имени);
5) гарантировать корпорации Майкрософт освобождение от ответственности и юридическую защиту в связи с любыми претензиями и исками, возникающими в результате использования или распространения приложения, включая оплату расходов на юридические услуги;
6) распространять ваше приложение, содержащее распространяемые компоненты, в сопровождении лицензионного соглашения, условия которого не менее жесткие, чем условия настоящего лицензионного соглашения (принятие пользователем вашего собственного лицензионного соглашения может осуществляться как личной подписью, так и по факту нажатия кнопки на экране или вскрытия упаковки);
7) не осуществлять дальнейшего распространения распространяемых компонентов пользователями вашего приложения;
8) ваше приложение не будет дублировать функциональные возможности программы Microsoft Access или, по разумному мнению корпорации Майкрософт, конкурировать с этой программой, а также:
9) если ваше приложение не требует от ваших пользователей приобретения лицензии на программу Microsoft Access для работы с ним, вам запрещается воспроизводить или использовать какие-либо распространяемые компоненты для коммерческого распространения совместно с текстовыми процессорами, электронными таблицами или системами управления базами данных общего назначения либо в составе интегрированного пакета общего назначения, компоненты которого включают текстовый процессор, электронную таблицу или систему управления базами данных иначе, чем лишь для целей импорта данных в какой-либо из форматов, поддерживаемых программой Microsoft Access.  Примечание.  Продукт, включающий в себя ограниченные возможности по обработке текста, электронных таблиц или управлению базами данных наряду с другими компонентами, реализующими существенные и основные возможности (например, программа для бухгалтерского учета с ограниченными возможностями по работе с электронными таблицами), не считается программой <общего назначения>.
.......
конец цитаты

Короче, нельзя использовать Jet, если вы пише Access на паскале :)
Во всех отстальных - юзайте на здоровье!
Сообщение не подписано


30-12-2003 16:12
"...довольно приличное приложение (собственной разработки), которое я использую вместо Access..."

Как то я читал лицензионное соглашение (по моему на jet), так там то ли ограничивается, то ли прямо запрещается создание программ с его использованием, которые могут составить конкуренцию MS Access. Так что хоть крякнутые программы не используются, но путь все же не чистый. Микрософт не благотворительный фонд, и даже бесплатные решения они не дадут использовать в ущерб себе...


30-12-2003 13:48
Хм...
Что-то я не понял. :(
Вроде и ADOX упоминается, и даже документация..
Так там же русским по белому написано, как читать/писать текст запроса:

var
  Catalog: OleVariant;
...

  Catalog := CreateOleObject('ADOX.Catalog');
  Catalog.ActiveConnection := ADOConnection1.ConnectionObject;
  Memo1.Lines.Add(Catalog.Views[0].Name);
  Memo1.Lines.Add(Catalog.Views[0].Command.CommandText);
  Catalog := Unassigned;

и писать так же..

Сообщение не подписано


30-12-2003 10:58
А завтра системные таблицы Access изменятся и кирдык? :) опять искать будете?


30-12-2003 06:19
>>>Первые таблицы приходилось создавать с помощью
>>>инструкций SQL. Я был приятно удивлен, что Access
>>>умеет через SQL такие вещи, которые нигде в
>>>справке по Access не описаны.

Скорее всего Вы неточно выразились. В Access была очень мощная справка по SQL языку всегда.

В остальном очень интересная и полезная статья.

Жаль, что не привели какого-либо демонстрационного кода - начинающим было бы очень полезно.



Добавьте свое cообщение

Вашe имя:  [Войти]
Ваш адрес (e-mail):На Королевстве все адреса защищаются от спам-роботов
контрольный вопрос:
Зимой — белый, летом — серый. Кто?
в качестве ответа на вопрос или загадку следует давать только одно слово в именительном падеже и именно в такой форме, как оно используется в оригинале.
Надоело отвечать на странные вопросы? Зарегистрируйтесь на сайте.

Оценка содержания
 
Содержит полезные и(или) интересные сведения
 
Ничего особенно нового и интересного
 
Написано неверно (обязательно укажите почему)


Оценка стиля изложения
 
Все понятно, материал читается легко
 
Есть неясности в изложении
 
Непонятно написано, трудно читается

Текст:
Жирный шрифт  Наклонный шрифт  Подчеркнутый шрифт  Выравнивание по центру  Список  Заголовок  Разделительная линия  Код  Маленький шрифт  Крупный шрифт  Цитирование блока текста  Строчное цитирование
  • вопрос Круглого стола № XXX

  • вопрос № YYY в тесте № XXX Рыцарской Квинтаны

  • сообщение № YYY в теме № XXX Базарной площади
  • обсуждение темы № YYY Базарной площади
  •  
     Правила оформления сообщений на Королевстве
      
    Время на сайте: GMT минус 5 часов

    Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
    Функция может не работать в некоторых версиях броузеров.

    Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
    Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

     
    © При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
    Все используемые на сайте торговые марки являются собственностью их производителей.

    Яндекс цитирования