| | | | |
Как достать SQL запрос из *.mdb без MS Access | Полный текст материала
Цитата или краткий комментарий: «... Речь идет о том, что базой данных mdb можно прекрасно пользоваться, не имея MS Office и Access. Все данные, необходимые для хранения и изменения информации можно хранить в mdb базе данных имея Delphi и подключенный ActiveX ADO и ADOX. ...» |
Важно:- Страница предназначена для обсуждения материала, его содержания, полезности, соответствия действительности и так далее. Смысл не в разборке, а в приближении к истине :о) и пользе для всех.
- Любые другие сообщения или вопросы, а так же личные эмоции в адрес авторов и полемика, не относящаяся к теме обсуждаемого материала, будут удаляться без предупреждения авторов, дабы не мешать жителям нормально общаться.
- При голосовании учитывайте уровень, на который расчитан материал. "Интересность и полезность" имеет смысл оценивать относительно того, кому именно предназначался материал.
- Размер одного сообщений не должен превышать 5К. Если Вам нужно сказать больше, сделайте это за два раза. Или, что в данной ситуации правильнее, напишите свою статью.
Всегда легче осудить сделанное, нежели сделать самому. Поэтому, пожалуйста, соблюдайте правила Королевства и уважайте друг друга.
Добавить свое мнение.
| | Содержит полезные и(или) интересные сведения | [1] | 4 | 50% | | | | Ничего особенно нового и интересного | [2] | 2 | 25% | | | | Написано неверно (обязательно укажите почему) | [3] | 2 | 25% | | Всего проголосовали: 8 | | | Все понятно, материал читается легко | [1] | 6 | 85.7% | | | | Есть неясности в изложении | [2] | 1 | 14.3% | | | | Непонятно написано, трудно читается | [3] | 0 | 0% | | Всего проголосовали: 7 |
[MS Access] [Создание/удаление объектов базы]
Отслеживать это обсуждение
Всего сообщений: 2328-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;
Table.Name := 'MyNewTable';
Table.Columns.Append('Id',3 , 4 );
Table.Columns[0].Properties['Autoincrement'].Value := True;
Table.Columns.Append('MyTextField', 130 , 64);
Table.Columns[1].Properties['Nullable'].Value := True;
Table.Columns[1].Properties['Jet OLEDB:Compressed UNICODE Strings'].Value := True;
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');
Table.Indexes.Append(Index);
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 языку всегда.
В остальном очень интересная и полезная статья.
Жаль, что не привели какого-либо демонстрационного кода - начинающим было бы очень полезно.
|
|
|
|