Uswer 1763 / 1241 / 322 Регистрация: 26.06.2017 Сообщений: 3,411 |
||||
1 |
||||
19.05.2021, 23:49. Показов 2104. Ответов 13 Метки нет (Все метки)
Всем добра! Возникла необходимость из программы используя ADO.NET, а ещё конкретнее OleDb провайдер, создать таблицу в базе данных Access. И сразу возникло несколько вопросов:
Я в SQL-запросах слаб, сильно не пинайте. Не по теме: Вопрос умышленно не задан в ветке Access потому, что сам Access не используется, а выполняется лишь доступ к mdb-файлу как к хранилищу. Вся работа делается через драйвер OleDb.
0 |
5089 / 4103 / 1026 Регистрация: 29.08.2013 Сообщений: 26,008 Записей в блоге: 3 |
|
20.05.2021, 00:16 |
2 |
что сам Access не используется ага, попробуйте без аксесса на ПК это запустить) иди в ветку по аксессу — вам все расскажут
0 |
1763 / 1241 / 322 Регистрация: 26.06.2017 Сообщений: 3,411 |
|
20.05.2021, 08:03 [ТС] |
3 |
попробуйте без аксесса на ПК это запустить Без проблем. Вы не внимательны я писал:
из программы используя ADO.NET если Вы не знаете, что такое ADO.NET и с чем его едят, то и не говорите ничего.
или книжку откройте Офигительный совет, сам бы я ни за что не догадался.
0 |
5089 / 4103 / 1026 Регистрация: 29.08.2013 Сообщений: 26,008 Записей в блоге: 3 |
|
20.05.2021, 10:19 |
4 |
если Вы не знаете, что такое ADO.NET и с чем его едят, то и не говорите ничего. жалко мне вас, вот пытаюсь помочь чем могу) а что такое DBTYPE_I4? вроде нет таких типов
сам бы я ни за что не догадался. конечно, ведь быстрее на других проблему переложить чем самому искать ответ))
0 |
1763 / 1241 / 322 Регистрация: 26.06.2017 Сообщений: 3,411 |
|
20.05.2021, 10:55 [ТС] |
5 |
а вы агритесь Я не агрюсь. Вы указали, что без Accessa запрос отправить нельзя, а я изначально сказал, что есть программа, из которой OleDb провайдеру отправляется запрос. И Access в этом обмене вообще ни при чём! Именно поэтому я и написал комментарий «не по теме».
а что такое DBTYPE_I4? Это тип данных, который должен понимать провайдер OleDb. Соответствие типов взято отсюда. Однако мне не совсем понятно зачем вообще это сопоставление указано мелкомягкими, если в запросе применяются какие-то другие типы (как я понял равные SQL-server).
жалко мне вас Не надо меня жалеть, просто помогите дельным советом, ведь именно для этого и существует форум!
ведь быстрее на других проблему переложить чем самому искать ответ Интересно для кого написан п.3.3 правил форума?
0 |
1556 / 988 / 376 Регистрация: 31.05.2012 Сообщений: 3,486 |
|
20.05.2021, 12:11 |
6 |
В синтаксисе по CREATE TABLE нет ни каких DBTYPE_I4 и прочее, а есть например integer. default для поля есть, но работает по-моему для jet ole db и ado, в остальных случаях реализуется только средствами VBA. Квадратные скобки обязательны если в качестве имени поля зарезервированное sql-слово, или в нем есть запрещенный символ для имени, пробел например. Список зарезервированных слов при желании можно найти
1 |
1763 / 1241 / 322 Регистрация: 26.06.2017 Сообщений: 3,411 |
|
20.05.2021, 13:58 [ТС] |
7 |
нет ни каких DBTYPE_I4 и прочее, а есть например integer Вот не понимаю я почему Integer, а не Int как для ядра SQL-сервера? Для указанного типа, применительно к ядру SQL-сервера, преобразование будет таким: в коде имеем тип
0 |
1556 / 988 / 376 Регистрация: 31.05.2012 Сообщений: 3,486 |
|
20.05.2021, 14:19 |
8 |
0 |
1763 / 1241 / 322 Регистрация: 26.06.2017 Сообщений: 3,411 |
|
20.05.2021, 14:34 [ТС] |
9 |
Аватар, вооот Вы сами и дали ответ на Ваш вопрос про
0 |
1556 / 988 / 376 Регистрация: 31.05.2012 Сообщений: 3,486 |
|
20.05.2021, 14:51 |
10 |
У меня не было вопроса про DBTYPE_I4. Вопрос у кого-то другого был, не?
0 |
5089 / 4103 / 1026 Регистрация: 29.08.2013 Сообщений: 26,008 Записей в блоге: 3 |
|
20.05.2021, 21:46 |
11 |
Uswer, вы переписали запрос? работает?
0 |
1763 / 1241 / 322 Регистрация: 26.06.2017 Сообщений: 3,411 |
|
21.05.2021, 08:16 [ТС] |
12 |
qwertehok, да переписал, более или менее разобрался в проблеме, но пока не проверял (времени не хватает). А что?
0 |
1619 / 1096 / 241 Регистрация: 14.08.2018 Сообщений: 3,604 Записей в блоге: 4 |
|
21.05.2021, 12:32 |
13 |
Uswer, никакого типа
0 |
1763 / 1241 / 322 Регистрация: 26.06.2017 Сообщений: 3,411 |
|
21.05.2021, 15:23 [ТС] |
14 |
Решение Всем, кто участвовал в обсуждении темы, сообщаю: Не по теме: В целом в проблеме пришлось разбираться самому, но не без помощи некоторых форумчан (без обид, но в этой ветке никто толком объяснить ничего не смог). Всем спасибо!
2 |
IT_Exp Эксперт 87844 / 49110 / 22898 Регистрация: 17.06.2006 Сообщений: 92,604 |
21.05.2021, 15:23 |
14 |
I want to alter a table and add multiple columns to my table but I am getting error
syntax error in field definition
I am working with vb.net and MS Access 2013.
Here is my code:
cmd.Connection = con
cmd.CommandText = "ALTER TABLE Game_Player ADD QUESTIONS TEXT(50),USER_ANSWER TEXT(10),TIME TEXT(10),SECOND (10),lbl_Lock TEXT(10),lbl_vis TEXT(10)"
cmd.ExecuteNonQuery()
HansUp
95.7k11 gold badges76 silver badges135 bronze badges
asked Feb 17, 2016 at 19:03
3
Access SQL does support adding multiple columns with one ALTER TABLE
statement.
The field definition error likely occurs due to the lack of a data type for the SECOND
field. However two of the column names, SECOND
and TIME
, are reserved words. (Also see the link @Andrew provided.) Those names may also trigger errors, but it’s not always easy to predict when they will cause trouble. The safest alternative would be to choose column names which are not reserved words. If you must keep those names, bracket them in your SQL statement …
ALTER TABLE Game_Player
ADD COLUMN
QUESTIONS TEXT(50),
USER_ANSWER TEXT(10),
[TIME] TEXT(10),
[SECOND] TEXT(10),
lbl_Lock TEXT(10),
lbl_vis TEXT(10)
I included the COLUMN
keyword and assumed TEXT
as the data type for SECOND
.
answered Feb 17, 2016 at 19:32
HansUpHansUp
95.7k11 gold badges76 silver badges135 bronze badges
0
|
От: |
Wind |
|
Дата: | 20.04.04 05:43 | ||
Оценка: |
Использую компилятор VC7. Обращаюсь с помощью ADO (через драйвер ODBC) к SQL Server 2К.Ниже следующий код выдает исключение (мол, не могу выполнить). Исключение выдает
Error Code = 3292
Source = DAO.Database
Description = Ошибка синтаксиса при определении поля.
Такого кода в таблице sysmessage (SQL Server) нет (равно как и такой таблицы) => следовательно это не его ошибка
DAODBEngine* DBeng=NULL;
CDaoDatabase *db=NULL;
AfxDaoInit();
DBeng = AfxDaoGetEngine();
db=new CDaoDatabase();
db->Open(«test»,false,false,»ODBC;PWD=xxx;UID=sa;») ;
if (db->IsOpen())
{
db->Execute(«CREATE TABLE time_fond ( id_time int NOT NULL, time datetime NULL, PRIMARY KEY (id_time))»);
}
Вопрос 1) Почему не выполняется запрос (с правами доступа все ОК, с синтаксисом SQL тоже)
Вопрос 2) Чья эта ошибка и кто вернул мне такой код ошибки (где его посмотреть)
P.S. Аналогичный код, но для MS Access выполняется на ура
|
От: |
Sinclair |
https://github.com/evilguest/ |
Дата: | 20.04.04 06:20 | ||
Оценка: |
Здравствуйте, Wind, Вы писали:
W>Вопрос 1) Почему не выполняется запрос (с правами доступа все ОК, с синтаксисом SQL тоже)
Хм. Constructing Interoperable SQL Statements? Может быть, дело именно в этом?
W>Вопрос 2) Чья эта ошибка и кто вернул мне такой код ошибки (где его посмотреть)
W>P.S. Аналогичный код, но для MS Access выполняется на ура
Тогда вообче загадка…
… << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
|
От: |
Elena_ |
|
Дата: | 20.04.04 07:35 | ||
Оценка: |
Здравствуйте, Wind, Вы писали:
W>Использую компилятор VC7. Обращаюсь с помощью ADO (через драйвер ODBC) к SQL Server 2К.Ниже следующий код выдает исключение (мол, не могу выполнить). Исключение выдает
W>Error Code = 3292
W>Source = DAO.Database
W>Description = Ошибка синтаксиса при определении поля.
)
W>Вопрос 2) Чья эта ошибка и кто вернул мне такой код ошибки (где его посмотреть)
Ошибка DAO — из документации по DAO 3.6:
Ошибка синтаксиса при определении поля. (Ошибка 3292)
Ошибка синтаксиса при описании поля в инструкции CREATE TABLE или ALTER TABLE.Возможные причины:
Пропущено или неверно указано зарезервированное слово или имя аргумента.
Неверная пунктуация.
Пользователь — друг программиста!
|
От: | Аноним | |
Дата: | 20.04.04 09:35 | ||
Оценка: |
Здравствуйте, Wind, Вы писали:
W>P.S. Аналогичный код, но для MS Access выполняется на ура
Это, да, это Билл Гейтс ещё как может, если чесно — в чём проблема не знаю,
но у меня была похожая фишка — в SQL запросах из под MS ACCESS прокатывали
* в параметрах в качестве любого знака, а через ODBC приходилось заменять
по стандарту SQL-92 — прочти какие-нибудь старые книги с описанием синтаксиса
CREATE TABLE.
P.S. Вроде ещё ; в конце SQL ставить надо …
|
От: |
Wind |
|
Дата: | 20.04.04 14:24 | ||
Оценка: |
Здравствуйте, Аноним, Вы писали:
А>* в параметрах в качестве любого знака, а через ODBC приходилось заменять
А>по стандарту SQL-92 —
Ну это штука достаточно известная, плюс это формальное нарушение синтаксиса для конкретной СУБД (одна хочет *, другая _). Тут вещь другая, я вначале решил не описывать ситуацию полностью, но раз все в тупике… Итак:
Есть скрипт (написанный мной же) для создания БД на SQL Server (в части схемы данных полность компатибал с Access и FoxPro). Скрипт АБСОЛЮТНО рабочий (запускался из QueryAnalizer). Ни каких вопросов по синтаксису.
Решил автоматизировать его запуск, начал писать эту программу. Хлоп — ошибка (с таблицей — частный случай, базу данных тоже не удалось создать). Процесс отладки опущу, приведу только вывод. В MS Access этот код полностью создает схему данных (от специфичных команд я, разумеется избавился), все правильно и ни каких нареканий. MS SQL — вы уже знаете.
Команды работы с данными SQL Servera выполняются, команды управления схемой данных — нет (команды менеджмента я не пробовал, ибо без схемы данных они не нужны). Вот и всё. Что делать?
А>CREATE TABLE.
А>P.S. Вроде ещё ; в конце SQL ставить надо …
Далеко не ИМХО: это пережиток.
|
От: |
Wind |
|
Дата: | 20.04.04 14:26 | ||
Оценка: |
Здравствуйте, Elena_, Вы писали:
E_>Ошибка DAO — из документации по DAO 3.6:
Ссылочку на документацию не дадите?
E_>Пропущено или неверно указано зарезервированное слово или имя аргумента.
E_>Неверная пунктуация.
см. http://rsdn.ru/Forum/MsgList.aspx?gid=6&start=1&flat=0
|
От: |
Elena_ |
|
Дата: | 20.04.04 15:19 | ||
Оценка: |
Здравствуйте, Wind, Вы писали:
W>Ссылочку на документацию не дадите?
Я просто посмотрела в справке по Access, там есть ветка по DAO, в описании объекта Error — Error.Number есть список ошибок.
Я не уверена, что мои соображения на этот счет правильные, но может быть, пригодится:
1) Может быть, ей не нравится слово time, как зарезервированное
2) Я всегда работала с командами DDL SQL Server’а (CREATE TABLE и т.д.) через DAO ODBCDirect, а не через DAO Jet на VB
Раньше обертки MFC для DAO не поддерживали ODBCDirect, см.например, Visual C++ Concepts: Adding Functionality
DAO and MFC
Note MFC now supports DAO 3.5. MFC DAO classes work either with DAO 3.0 or DAO 3.5, but have not been designed to take advantage of any new DAO 3.5 features, including ODBCDirect
Я не уверена, что вообще можно выполнить CREATE TABLE через этот оберточный класс. Может быть, надо подключать DAO напрямую без MFC, или по-моему лучше использовать ADO.
Но очень возможно, что я ошибаюсь, сейчас нет времени проверять.
Пользователь — друг программиста!
|
От: |
Sinclair |
https://github.com/evilguest/ |
Дата: | 20.04.04 17:28 | ||
Оценка: |
Здравствуйте, Wind, Вы писали:
W>Команды работы с данными SQL Servera выполняются, команды управления схемой данных — нет (команды менеджмента я не пробовал, ибо без схемы данных они не нужны). Вот и всё. Что делать?
У меня единственное подозрение — в сторону ODBC драйвера для SQL. Это, вроде бы, единственное место, через которое может не пролезть команда, успешно выполняемая в Query Analyser. В связи с этим есть доп вопросы:
1. Вообще никакие DDL не проходят? Пример, приведенный в исходном постинге — довольно сложный. Вот такой тоже не пролазит:
create table t1(id int)
?
2. Что показывает профайлер? Доезжает ли команда до сервера? И если доезжает, то в каком виде?
… << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
|
От: |
Elena_ |
|
Дата: | 20.04.04 21:41 | ||
Оценка: |
Здравствуйте, Elena_, Вы писали:
E_>Я не уверена, что вообще можно выполнить CREATE TABLE через этот оберточный класс. Может быть, надо подключать DAO напрямую без MFC, или по-моему лучше использовать ADO.
E_>Но очень возможно, что я ошибаюсь, сейчас нет времени проверять.
Я еще посмотрела, из описания CREATE TABLE для JET:
Note The Microsoft Jet database engine doesn’t support the use of CREATE TABLE, or any of the DDL statements, with non-Microsoft Jet database engine databases. Use the DAO Create methods instead.
Если я не ошибаюсь в терминологии, то «Microsoft Jet engine databases» — это mdb файлы, а SQL server к ним не относится, судя по следующей цитате. Хотя я нигде не нашла четкого определения, что такое «Microsoft Jet engine databases».
Note For better performance when accessing external databases, including ISAM databases and ODBC data sources, it is recommended that you attach external database tables to a Microsoft Jet engine database (.MDB) rather than connecting directly to the data source.
Пользователь — друг программиста!
|
От: |
Wind |
|
Дата: | 22.04.04 07:18 | ||
Оценка: |
Здравствуйте, Elena_, Вы писали:
E_>>Я не уверена, что вообще можно выполнить CREATE TABLE через этот оберточный класс. Может быть, надо подключать DAO напрямую без MFC, или по-моему лучше использовать ADO.
Ладно, покажу свою безграматность. Чем отличаются DAO и ADO? Как можно подключить DAO без MFC обертки?
E_>Note For better performance when accessing external databases, including ISAM databases and ODBC data sources, it is recommended that you attach external database tables to a Microsoft Jet engine database (.MDB) rather than connecting directly to the data source.
E_>[/q]
Пусть я буду безграмотным до конца. Что такое ISAM?
|
От: |
Wind |
|
Дата: | 22.04.04 07:34 | ||
Оценка: |
Здравствуйте, Sinclair, Вы писали:
S>1. Вообще никакие DDL не проходят? Пример, приведенный в исходном постинге — довольно сложный.
Что такое DDL?
Ни какие команды по управлению(созданию и пр.) схемой данных не проходят. Все команды работы с данными проходят.
S>2. Что показывает профайлер? Доезжает ли команда до сервера? И если доезжает, то в каком виде?
Команды управления не доходят до Сервера. Ни в каком виде.
Еще один интересный момент. Если открывать access через ODBC (весь код тотже, но вместо пути до файла указать его DSN), то команды, также не пролазят, правда код ошибки другой:
Error Code = 3423
Source = DAO.Workspace
Description = Не допускается использование ODBC для импорта, экспорта или присоединения таблицы из внешней базы данных Microsoft Jet или базы данных ISAM.
Вот такое дао для DAO… Простите за каламбур.
Вопрос: какой механизм обращения к БД мне лучше использовать, чтобы избежать таких глюков (вернее не глюков а несовместимостей)? Два условия: 1) Компилятор VC7 2) На машину не должны устанавливатся какие-нибудь специальные пакеты. Только Windows + SP к нему + SQL Server.
|
От: |
Elena_ |
|
Дата: | 22.04.04 10:10 | ||
Оценка: |
Здравствуйте, Wind, Вы писали:
W>Чем отличаются DAO и ADO? Как можно подключить DAO без MFC обертки?
W>Что такое ISAM?
Собственно и DAO и ADO это компоненты для работы с базами данных — DAO расшифровывается как Data Access Objects, а ADO как ActiveX Data Objects. Если Вы сделаете поиск в MSDN по любому из этих сокращений или по обоим, то получите кучу всего. Например:
Porting DAO Code to ADO with the Microsoft Jet Provider
Migrating from DAO to ADO Using ADO with the Microsoft Jet Provider
WP: Migrating DAO/ODBCDirect to ADO To Use MSDE
DAO — более старая технология, кажется, после 3.6 ее и не обещают развивать. У нее доволько узкий круг применения —
1) собственно mdb — то, что они называют Microsoft Jet engine database, хотя я не нашла четкого определения
2) через драйверы ISAM: у меня такой список, может быть, он устарел
Microsoft Fox Pro 2.0б 2.5б 2.6ь 3.0 (только для чтения) и DBC
dBASE III, dBASE IV, dBASE 5.0
Paradox 3.x, 4.x, 5.x
Рабочие листы Microsoft Excel 3.0, 4.0, 5.0, 7.0, 8.0
Microsoft Exchange и Outlook
Электронные таблицы Lotus 1-2-3 WK1, WK3, WKS
Таблицы в текстовых файлах с разделителями или колонками фиксированной ширины
Таблицы в файлах на языке гипертекстовой разметки HTML
Я лично с ISAM драйверами совсем не работала, по-моему это все устарело и сейчас не используется.
3) Источники данных ODBC — как раз Microsoft SQL Server и вообще все что угодно через ODBC, например Btrieve или Oracle
ADO — появилась после DAO, продолжает развиваться, и имеет гораздо более широкую область применения. Если есть OLE DB провайдер, то можно работать через ADO.
Welcome to ADO
Microsoft® ActiveX® Data Objects (ADO) enable your client applications to access and manipulate data from a database server through an OLE DB provider.
Использовать DAO можно через Microsoft JET или через ODBCDirect. Если Вы при создании DAO.Workspace указываете dbUseODBC, то напрямую обращаетесь к ODBC источнику, соответственно при работе с SQL server через ODBCDirect Вы просто выполняете команды T-SQL, в частности CREATE TABLE и вообще любые DDL. Если Workspace имеет тип dbUseJet, так по умолчанию (там в DBEngine есть DefaultType), то все DAO операции идут через Jet, в частности и CREATE TABLE — это не CREATE TABLE T-SQL, а CREATE TABLE для Jet SQL, а для нее имеется ограничение, о котором я говорила — только для mdb (если я правильно поняла документацию), соответственно Вы не можете через DAO без ODBCDirect выполнить CREATE TABLE и другие DDL. Вроде бы в этом случае они предлагают использовать методы DAO CreateTableDef, CreateQueryDef и т.п., я не пробовала.
А обертка MFC не включала эту возможность, там просто нет параметра, чтобы поменять тип Workspace, поэтому через оберточный класс CDAOWorkspace не получить ODBCDirect.
Я сама никогда не подключала DAO напрямую из C++, только через MFC обертку, из VB идет просто доступ к объектам и там нет проблем установить ODBCDirect, но думаю, что можно через #import или CoCreateInstance, потом GetIDsOfNames и Invoke, или любым другим способом, как компоненты подключаются.
Вообще говоря, если Вы начинаете задачу, наверное, лучше ориентироваться на ADO. Иногда при работе с Access действительно может пригодиться DAO, но это скорее уже личный выбор. При работе с SQL server однозначно лучше использовать ADO, DAO c ODBCDirect — худший выбор (собственно это появилось, когда ADO по-моему еще не было), а DAO Jet вообще по-моему не имеет смысл использовать для SQL Server’а.
Конечно, лучше если Вы посмотрите MSDN, так как я могу и наврать в теории, на практике у меня вот такие выводы.
Пользователь — друг программиста!
- Переместить
- Удалить
- Выделить ветку
Пока на собственное сообщение не было ответов, его можно удалить.
Регистрация на форуме тут, о проблемах пишите сюда — alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите восстановить пароль
Поиск по форуму |
Расширенный поиск |
Страница 1 из 2 | 1 | 2 | Следующая > |
Почему возникает эта ошибка.
Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘[Стипендія нарахування].[Середній бал]? (база данных в Access 2010)
SELECT [Стипендія нарахування].[Середній бал]
IF([Середній бал]<4,»0″,
IF([Середній бал]=5,»950″,
IF([Середній бал]>=4 And <5,»800″)) AS [Стипендія]
FROM [Стипендія нарахування];
Сообщение об ошибке при использовании специальных символов в базах данных Access
В этой статье перечислены специальные символы, которые не следует использовать при работе с именами объектов базы данных или именами полей во всех версиях Access.
Оригинальный номер базы знаний: 826763
Эта статья применима к файлам баз данных Microsoft Access (.mdb) или (.accdb), а также к файлу проекта Microsoft Access (.adp).
Симптомы
При использовании специальных символов в Access возникает одна из следующих проблем.
Проблема 1
В имени поля таблицы используется один из следующих специальных символов:
- Знак над символом (`)
- Восклицательный знак (!)
- Точка (.)
- квадратные скобки ([])
- Пробел
- Непечатаемые символы
В этом случае отобразится следующее сообщение об ошибке:
Недопустимое имя поля.
Убедитесь, что имя не содержит точку (.), восклицательный знак(!), квадратные скобки ([]), пробел или непечатаемый символ, например символ возврата каретки. Если вы вставляете имя из другого приложения, попробуйте нажать клавишу ESC и ввести имя еще раз.
При использовании этих специальных символов в имени таблицы отобразится следующее сообщение об ошибке:
Введенное имя объекта ‘TableName‘ не соответствует правилам именования объектов Microsoft Office Access.
Проблема 2
Вы создаете выражение запроса. Выражение запроса включает поля, содержащие специальные символы. При использовании отдельных специальных символов отображается следующее сообщение об ошибке:
Если имя поля содержит пробел, вопросительный знак (?) или знак @, отобразится следующее сообщение об ошибке:
Ошибка синтаксиса во введенном выражении.
Задано значение для операции без оператора
Если имя поля содержит кавычки («) или апостроф (‘), отобразится следующее сообщение об ошибке:
Введенное выражение содержит ошибочную строку.
Строка может содержать до 2048 знаков, включая знаки открывающей и закрывающей кавычек.
Если имя поля содержит знак решетки (#), отобразится следующее сообщение об ошибке:
Введенное выражение содержит недопустимое значение даты.
Если имя поля содержит знак процента (%), тильду (
), точку с запятой (;) или скобки ([]), отобразится следующее сообщение об ошибке:
Ошибка синтаксиса во введенном выражении.
Пропущен операнд или оператор, введен недопустимый знак или лишняя запятая, либо задана строка без кавычек.
Если имя поля содержит фигурные скобки (), отобразится следующее сообщение об ошибке:
Неверно сформированный код GUID в выражении запроса ‘ObjectName‘
Если имя поля содержит квадратные скобки ([]) или круглые скобки (()), отобразится следующее сообщение об ошибке:
Во введенном выражении отсутствует закрывающая скобка, квадратная скобка (]) или вертикальная черта (|).
Проблема 3
У вас есть запрос, содержащий выражения запроса. Выражения запроса включают поля, содержащие специальные символы. При выполнении запроса предлагается ввести значение параметра. Как правило, эта проблема возникает при использовании следующих специальных символов:
- знак «больше» (>);
- знак «меньше» (<);
- Точка (.)
- Звездочка (*)
- Двоеточие (:)
- Крышка (^)
- Знак плюс (+)
- Обратная косая черта ()
- Знак равенства (=)
- амперсанд (&);
- Косая черта (/)
Обходной путь
Чтобы устранить эту проблему, не используйте специальные символы. Если в выражениях запроса необходимо использовать специальные символы, заключите их в квадратные скобки ([]). Например, если вы хотите использовать знак «больше» (>), используйте [>].
Дополнительная информация
Microsoft Access не ограничивает использование специальных символов, таких как знак решетки (#), точка (.) или кавычки («) в именах объектов базы данных или в именах полей базы данных. Однако при использовании специальных символов могут возникнуть непредвиденные ошибки. Поэтому корпорация Майкрософт рекомендует не использовать специальные символы в именах объектов базы данных в базе данных Access или в проекте базы данных. В этой статье рассматриваются специальные символы, которые не следует использовать во избежание известных проблем с ними.
При работе с Access или другим приложением, например приложением Microsoft Visual Basic или приложением Active Server Pages (ASP), не следует использовать следующие специальные символы:
Соглашения об именовании в Access
Корпорация Майкрософт рекомендует не использовать точку (.), восклицательный знак (!), знак ударения (`), квадратные скобки ([ ]), пробел ( ) или кавычки («) внутри имен функций, имен переменных, имен полей или имен объектов базы данных, таких как таблицы и формы.
Использование следующих специальных символов в Access приводит к возникновению известных проблем. В следующих сценариях описано, когда не следует использовать специальные символы:
Что значит пропущен оператор в выражении запроса access
Профиль
Группа: Участник
Сообщений: 310
Регистрация: 15.11.2007
Репутация: нет
Всего: нет
Здравствуйте.
Вобще на форме выбирется ДАТА в dateTimePicker, затем хочу сделать ЗАПРОС на ВЫБОРКУ из таблицы (Access) по этой дате . ну если дата совпала, то потом все вывожу в dataGridView1
Код |
OleDbDataAdapter B = new OleDbDataAdapter(«SELECT * FROM Содержание_заказа WHERE Дата=»+dateTimePicker1.Value+»», «Provider=Microsoft.Jet.OLEDB.4.0;» + «Data Source=» + @»….kafe.mdb»); B.SelectCommand.Connection.Open(); B.SelectCommand.ExecuteNonQuery(); B.SelectCommand.Connection.Close(); DataTable C = new DataTable(); B.Fill(C); dataGridView1.DataSource = C; |
ну вобщем когда я на форме выбираю дату и нажимаю кнопку поиск ВЫЛАЗИЕТ вот такая ОШИБКА:
Код |
Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘Дата=03.12.2008 0:00:00’. |
Код |
SELECT * FROM Содержание_заказа WHERE Дата=03.12.2008 0:00:00 |
Помогите разобраться с этой проблемой.
Заранее спасибо.
Let’s do some .NET
Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург
Репутация: нет
Всего: 67
kuller, dateTimePicker1.Value.ToString(«dd.MM.yyyy»);
Добавлено через 36 секунд
kuller, а вообще в каком формате дата хранится в базе?
Профиль
Группа: Участник
Сообщений: 310
Регистрация: 15.11.2007
Репутация: нет
Всего: нет
Let’s do some .NET
Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург
Репутация: нет
Всего: 67
Вот так выглядит у меня в Access 2003 запрос на выборку поля с датой
SELECT Table1.ID, Table1.Field1
FROM Table1
WHERE (((Table1.Field1)=#1/10/2008#));
Профиль
Группа: Участник
Сообщений: 310
Регистрация: 15.11.2007
Репутация: нет
Всего: нет
Код |
Дата содержит синтаксическую ошибку в выражении запроса ‘Дата=#03.12.2008 0:00:00#’. |
Код |
SELECT * FROM Содержание_заказа WHERE Дата=#03.12.2008 0:00:00# |
Добавлено через 4 минуты и 4 секунды
и так ошибка(((
Код |
OleDbDataAdapter B = new OleDbDataAdapter(«SELECT * FROM Содержание_заказа WHERE (([Содержание_заказа].[Дата]=» + dateTimePicker1.Value + «))», «Provider=Microsoft.Jet.OLEDB.4.0;» + «Data Source=» + @»….kafe.mdb»); |
Код |
Ошибка синтаксиса (пропущен оператор) в выражении запроса ‘(([Содержание_заказа].[Дата]=03.12.2008 0:00:00))’. |
Let’s do some .NET
Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург
Репутация: нет
Всего: 67
kuller, попробуйте прогнать запрос с хардкодом
Код |
OleDbDataAdapter B = new OleDbDataAdapter(«SELECT * FROM Содержание_заказа WHERE Дата= #12/03/2008#», «Provider=Microsoft.Jet.OLEDB.4.0;» + «Data Source=» + @»….kafe.mdb»); B.SelectCommand.Connection.Open(); B.SelectCommand.ExecuteNonQuery(); B.SelectCommand.Connection.Close(); DataTable C = new DataTable(); B.Fill(C); dataGridView1.DataSource = C; |
Профиль
Группа: Участник
Сообщений: 310
Регистрация: 15.11.2007
Репутация: нет
Всего: нет
Код |
OleDbDataAdapter B = new OleDbDataAdapter(«SELECT * FROM Содержание_заказа WHERE Дата=#12/03/2008#», . |
ну т.к. в БД нет строки с такой датой то у меня выскочила табличка:
Код |
MessageBox.Show(«Извените, по вашему запросу ничего не найдено», . |
значит все работает, но это для статического варианта даты . а вот как теперь это исправить для динамически меняющейся даты.
Добавлено через 1 минуту и 8 секунд
Вот поставил 20/11/2008:
и в dataGridView1 вывелись ВСЕ найденные РЕЗУЛЬТАТЫ .. причем верные)))))
Добавлено через 3 минуты и 34 секунды
ВЫВОД:
дату надо получить из dateTimePicker1.Value и привести к виду:
#ч/м/г#,а потом только вызывать запрос.
Let’s do some .NET
Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург
Репутация: нет
Всего: 67
Код |
OleDbDataAdapter B = new OleDbDataAdapter(«SELECT * FROM Содержание_заказа WHERE Дата=#»+dateTimePicker1.Value.ToString(«dd/MM/yyyy»)+»#», «Provider=Microsoft.Jet.OLEDB.4.0;» + «Data Source=» + @»….kafe.mdb»); B.SelectCommand.Connection.Open(); B.SelectCommand.ExecuteNonQuery(); B.SelectCommand.Connection.Close(); DataTable C = new DataTable(); B.Fill(C); dataGridView1.DataSource = C; |
Это сообщение отредактировал(а) Partizan — 4.12.2008, 12:28
Профиль
Группа: Участник
Сообщений: 310
Регистрация: 15.11.2007
Репутация: нет
Всего: нет
Да уж(
и так не работате((((
Код |
OleDbDataAdapter B = new OleDbDataAdapter(«SELECT * FROM Содержание_заказа WHERE Дата=#»+dateTimePicker1.Value.ToString(«MM/dd/yyyy»)+»#», «Provider=Microsoft.Jet.OLEDB.4.0;» + «Data Source=» + @»….kafe.mdb»); |
Код |
Дата содержит синтаксическую ошибку в выражении запроса ‘Дата=#11.20.2008#’. |
Код |
SELECT * FROM Содержание_заказа WHERE Дата=#11.20.2008# |
Добавлено через 5 минут
Причем по моему не так:
ToString(«MM/dd/yyyy»)
а вот так:
ToString(«dd/MM/yyyy»)
ну всеравно не пашет((((
Это сообщение отредактировал(а) kuller — 4.12.2008, 12:32
Let’s do some .NET
Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
- VINNY-PYX
- Продвинутый пользователь
-
- Сообщения: 125
- Зарегистрирован: 02.02.2004 (Пн) 17:24
- Откуда: из роддома
-
- ICQ
Создать таблицы в Access 2003 с помощью SQL
Мне нужно создать две таблицы и потом связать их. Для оракула делал так:
- Код: Выделить всё
CREATE TABLE permitions (
id NUMBER PRIMARY KEY,
name varchar(16)
);CREATE TABLE users (
id NUMBER PRIMARY KEY,
login varchar(16),
pass varchar(32),
perm REFERENCES permitions(id)
);
Но ВБ ругается: «ошибка синтаксиса при определении поля». Я думаю это изза REFERENCES так как первая таблица успешно создается.
Как мне вооплотить замысел?
Если вручную добавить таблицу users, то при исполнении
- Код: Выделить всё
CREATE TABLE staff (
id NUMBER PRIMARY KEY,
pid NUMBER,
firstname varchar(20),
middlename varchar(20),
lastname varchar(20),
salary NUMBER,
CONSTRAINT pers_id
FOREIGN KEY (pid)
REFERENCES users(id)
ON DELETE CASCADE
);
вылазит ошибка: «отношение должно быть задано для одинакового количества с одинаковыми типами данных»
Как исправить?
И еще: триггеры работают?
- alibek
- Большой Человек
- Сообщения: 14205
- Зарегистрирован: 19.04.2002 (Пт) 11:40
- Откуда: Russia
alibek » 13.08.2007 (Пн) 8:00
Триггеров в настольной базе данных нет.
Типа данных NUMBER тоже нет, используй INT или DECIMAL.
Lasciate ogni speranza, voi ch’entrate.
- VINNY-PYX
- Продвинутый пользователь
-
- Сообщения: 125
- Зарегистрирован: 02.02.2004 (Пн) 17:24
- Откуда: из роддома
-
- ICQ
VINNY-PYX » 16.08.2007 (Чт) 0:11
При програмном добавлении таблицы ADOX.Catalog.Tables.Count не изменяется до перезапуска программы. как это исправить?
- alibek
- Большой Человек
- Сообщения: 14205
- Зарегистрирован: 19.04.2002 (Пт) 11:40
- Откуда: Russia
alibek » 16.08.2007 (Чт) 7:45
А как добавляешь?
Refresh делаешь?
Lasciate ogni speranza, voi ch’entrate.
- VINNY-PYX
- Продвинутый пользователь
-
- Сообщения: 125
- Зарегистрирован: 02.02.2004 (Пн) 17:24
- Откуда: из роддома
-
- ICQ
VINNY-PYX » 17.08.2007 (Пт) 18:08
спс. рефрешить католог надо было. Я refresh в ADOX.Catalog’е искал, а он был в ADOX.Catalog.Tables.
- Денис
- Доктор VB наук
-
- Сообщения: 2734
- Зарегистрирован: 07.11.2006 (Вт) 13:55
- Откуда: Ейск, Краснодарский край
-
- ICQ
Денис » 17.08.2007 (Пт) 22:17
VINNY-PYX
Чтобы поймать юзера — думай, как юзер: В Access открой редактором новый запрос на создание таблицы, визуально создай все поля, а затем открой полученный запрос в SQL-виде.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.
Вернуться в Базы данных
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0