powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Непонятки с dbExpress для MS SQL.
10 сообщений из 10, страница 1 из 1
Непонятки с dbExpress для MS SQL.
    #32294351
sa_borisov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!
Извините за столь подробное изложение - наболело. Кто работает с MS SQL через dbExpress, поделитесь опытом, пожалуйста.
Я перехожу с BDE на dbExpress. Партия сказала "надо", народ ответил - "есть".
Для этого скачал я обновлённую версию драйвера dbexpmss, в которой якобы устранены проблемы с пустыми юзерами/паролями в параметрах SQLConnection. Но без юзера и пароля, что во все времена, в BDE по крайней мере, означало лишь одно - Windows Authentication, как не соединялось, так и не соединяется. Видимо проблему устранили, но криво. Если раньше ругалось "error maping file" - какая-то внутренняя ошибка драйвера, то теперь "login failed for user '(null)'" - пытается видимо соединяться.
Чего делать-то? В dbExpress, что, принципиально не поддерживают SQL Authentication?
Но это ладно, потерпим. Беспокоит другое - упорное желание заставить моих юзеров работать со схемами имени их же. Т. е. процедуру [dbo].[proc_name] не знаем, её параметров тоже, подавай [user].[proc_name]. Но у меня в БД одна схема - dbo. А что же остальным делать? Где логика? Смотрю в профайлере, и слёзы капают -
Код: plaintext
1.
2.
 exec [SOME_BD_NAME]..sp_procedures_rowset; 2  N'user'
exec [SOME_BD_NAME]..sp_procedure_params_rowset N'dbo.SOME_SP_NAME',  1 , N'user', NULL

Куда это годится? Зачем там "N'user'"? Ведь указано же - "dbo". Должно быть так -
Код: plaintext
1.
2.
 exec [SOME_BD_NAME]..sp_procedures_rowset; 2 
exec [SOME_BD_NAME]..sp_procedure_params_rowset N'SOME_SP_NAME',  1 , N'dbo', NULL

Такое впечатление, что делалось всё в попыхах, и толком не тестировалось.
Сервер со схемами объектов в запросах разбирается умнее - если она не указана, то объект ищется в схеме текущего юзера, и если такого нет, то поиск продолжается в схеме dbo, а если указана, так и разнотолков не возникает. Тут нет - всё равно лезет в схему текущего юзера, не находит там, ну и не надо.
Видимо из-за этого ломается при выполнении процедур с параметрами - пишет "List index out of bounds(0)".
Как заставить работать этот, чтоб ему, dbExpress?
...
Рейтинг: 0 / 0
Непонятки с dbExpress для MS SQL.
    #32294417
sa_borisov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, из-за некоректного обращения dbExpress со схемами объектов нельзя выполнить процедуру из схемы, отличной от схемы текущего юзера. Даже если создал параметры вручную, и явно указал хозяина процедуры, dbExpress перед выполнением ещё раз запрашивает информацию о параметрах из схемы текущего юзера. Не находит и ломается.
Что за глупости?!?! Зачем этот лишний трафик?! Ведь я точно знаю, что и как буду вызывать.
Млин, и это Борланд?!
...
Рейтинг: 0 / 0
Непонятки с dbExpress для MS SQL.
    #32294599
sa_borisov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа, неужели никто не сталкивался с такими проблемами? Хоть соображения или замечания свои выскажите.
...
Рейтинг: 0 / 0
Непонятки с dbExpress для MS SQL.
    #32294610
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так и не понял - какие конкретно проблемы?

-- Tygra's --
...
Рейтинг: 0 / 0
Непонятки с dbExpress для MS SQL.
    #32296152
sa_borisov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если выше по тексту не конкретно, то прошу прощения.
Проблемы две:
1. Не соединяется по Windows Authentication.
2. Не выполняются процедуры из "неродной" схемы юзера, от имени которого осуществлено подключение.
Подробнее см выше.
...
Рейтинг: 0 / 0
Непонятки с dbExpress для MS SQL.
    #32296516
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Не соединяется по Windows Authentication

Врешь, соединяеться. Выставь в параметрах TSQLConnection значение OS Authentication в TRUE.

2. Не выполняются процедуры из "неродной" схемы юзера, от имени которого осуществлено подключение.

В свойствах компонента доступа установи значение свойства Shema в соответствии с владельцем, обычно dbo. И параметры руками не надо будет прописывать.
...
Рейтинг: 0 / 0
Непонятки с dbExpress для MS SQL.
    #32296944
sa_borisov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 pkarklin>>
Пожалуйста, поподробнее изложите, что нужно сделать. Может у Вас свой способ?
OS Authentication=True, user/password можно удалить совсем, можно оставить пустыми, результат один - <<SQL State: 42000, SQL Error Code: 18456 Login failed for user '(null)>>
И у какого компонента доступа есть свойство Shema?
А параметры я руками не прописываю. TSQLStoredProc создаю во время исполнения, в коде же и создание параметров.
Скачал сторонний драйвер - dbexpsda.dll. У него пока таких проблем не замечено.
...
Рейтинг: 0 / 0
Непонятки с dbExpress для MS SQL.
    #32296998
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OS Authentication=True этого достаточно. Может у тебя на сиквеле Mixed Mode включен, а не Windows Only?

у какого компонента доступа есть свойство Shema?
А параметры я руками не прописываю. TSQLStoredProc создаю во время исполнения, в коде же и создание параметров.


У TSQLStoredProc. А для параметров достаточно вызвать метод Refresh. И зачем ты все это в коде создаешь?! Положил в DT на модуль стока хп, скока надо, установил свойства. А потом в коде тока устанавливай параметры и вызывай.
...
Рейтинг: 0 / 0
Непонятки с dbExpress для MS SQL.
    #32297166
sa_borisov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To pkarklin>> Миксед-мод включен. Так и надо. А какое это имеет значение? В BDE проблем не было с Windows Authentication, да и, как я уже сказал, "чужой" драйвер соединяется без проблем. Правда у него тоже "заморочки" с параметрами хр. процедур из чужих схем. Указаное свойство нашёл, только не то и не там. В Delphi это называется SchemaName. Оно? Но вся беда, что я работаю в Builder, и там (!!!) такого свойства нет! Очень интересно. Есть метод SetSchemaInfo(). Наверно про это. Буду разбираться.
Про создание всего в коде: мне показалось, что так удобнее и правильнее, т.к. процедур за 500, всё сразу глупо создавать - львиная доля не понадобится, создаю по мере необходимости, а задавая параметры вручную избавляю сервер и сеть от лишних нагрузок.
Тут ещё один казус выявился - нельзя передать в процедуру null. В BDE было просто - не присваиваешь ничего, или сделаешь Clear() - значение параметра null, а тут нет, для строки даже если явно задашь Value.Type = Null, то для строкового параметра передаётся '', для integer - 0, и т.д. С этим-то как быть?
И про соединение что можете сказать?
...
Рейтинг: 0 / 0
Непонятки с dbExpress для MS SQL.
    #32297222
sa_borisov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу у всех прощения, вопрос был задан не в том форуме. :-\
В Delphi всё работает как надо. Виновата реализация классов dbExpress в Builder.
Очень странно, что есть какие-то отличия, ведь всю жизнь vcl в Builder представлял собой несколько заголовочных файлов, эдакую прокладку-переходник, а всё остальное было реализовано на паскале, и было анологично соответствующим классам, переменным, функциям и процедурам Delphi. Или dbExpress уже не vcl? Хотя всё-равно, почему есть отличия? Ну будем брать C++BuilderX, в надежде, что там всё путём.

А про вызов процедур с null-параметрами, кто что сказать может? (см. пред. с.)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Непонятки с dbExpress для MS SQL.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]