powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите. плиз
10 сообщений из 10, страница 1 из 1
Помогите. плиз
    #32031372
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для SQLOLEDB провайдера

str1 = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=RP;Data Source=server_mail"

Для ODBC

str2= "Driver={SQL Server};Server=server_mail;Uid=;Pwd=;Database=RP"

так вот
если

con.open str2
con.Execute ("CREATE TABLE ##Pochta (FileName varchar(255), Kod int)")

и все работает

а если

con.open str1
con.Execute ("CREATE TABLE ##Pochta (FileName varchar(255), Kod int)")

таблица ##Pochta не создается, и не какой ошибки не происходит, как буд-то она на самом деле создалась.

Почему она не создается?
...
Рейтинг: 0 / 0
Помогите. плиз
    #32031375
Dankov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это означает скорее всего, что сессия закрывается и, есно, удаляются автоматически все временные таблицы, созданные в этой сессии.
А вот почему она закрывается, сказать сложно из-за недостатка информации.
...
Рейтинг: 0 / 0
Помогите. плиз
    #32031401
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4 Dankov
Да я то же так думаю. Но почему в одном случае она закрывается, а в другом нет?
...
Рейтинг: 0 / 0
Помогите. плиз
    #32031450
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему она не закрывается в одном из случаев - не знаю. Но должна закрываться. Просто потому, что ты для выполнения используешь не отдельный объект ADO Command, а используешь метод Execute объекта Connection. При этом динамически создается объект Command, команда выполняется, а созданный объект автоматом должен уничтожиться.
...
Рейтинг: 0 / 0
Помогите. плиз
    #32031463
AlexanderVS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На вопрос почему, к сожалению так же ответить не могу. От себя хочу добавить, что если объявить рекордсет, а при его открытии писать вместо селекта - "CREATE TABLE #...." , то все замечательно работает (как и "UPDATE Table1 SET .....") и таблица живет до закрытия коннекта или до момента явного уничтожения.
...
Рейтинг: 0 / 0
Помогите. плиз
    #32031568
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4 Garya
Не пойму в чем разница. Между:

1)создать объект ADO Command (у которого CommandType=adCmdText) на основе ADODB.Connection, а потом выполнить метод Execute ADO Command'a

и

2)просто использовать метод Execute объекта ADODB.Connection.

Или для объекта ADO Command нужно открывать новое соединение, и закрывать его, когда таблица уже не нужна. Ведь в случае одного соединения разницы между 1) и 2) нет (не утверждаю,но предполагаю!) и должно происходить то же самое.
Странно.
Я делал так. В обоих случаях ставил брекпоинт в редактрое VB на строку с Execute, после выполнения строки в query tool делал запрос к таблице, так вот в одном случае query tool ругалась что нет такой таблицы в базе, а в другом случае показывала ее содержимое (название полей и 0 записей) как ни в чем не бывало. Причем я делал запросы именно когда текущей базой query tool была именна та база, в которой создается таблица. Я специально обращал на это внимание, и пробовал раз 20. В обоих случаях результат был различным. Если нужно использовать два соединения, то это мне не подходит, я сразу отказался от этого, и предполагаю, что один клиент должен использовать одно соединение. Так, однажды, насував кучу adodc на формы я получил кучу соединений (15) (отдельное для каждого контрола), что привело меня в ужас, когда работая с сервером я узнал, что все 15 разрешенных соединений установлены и больше их устанавливать сервер не дает. Потом, по совету добрых людей с этого форума, я сделал чтобы все эти контролы цеплялись на одно соединение, а потом вообще отказался от них, "заставив" DataGrid'ы цепляться к рекордсетам, созданным на основе одного соединения. Но судя по всему, одним соединением можно обойтись не всегда?
Если в своих предположениях я не ошибся, то придется искать другой способ, а если я не прав, поясни, плиз.
...
Рейтинг: 0 / 0
Помогите. плиз
    #32031570
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что конкретно происходит до и после брекпоинта, можно посмотреть с помощью Profiler. А вот разница между рукопашным созданием объекта ADO Command и задание текста команды в самом Connection весьма существенная.
Вообще в объектной модели ADO можно работать:
1. с Command без Connection,
2. с Connection без Command,
3. создать оба объекта и завязать их друг на друга.
То, что ты не создаешь явно соответствующий объект, это не значит, что этот объект не создается. Он создается динамически в недрах самой ADO, и после выполнения текущего действия автоматически уничтожается. Это и понятно. Уничтожить объект, который ты сам не создавал, и на которой бог весть где раздобыть ссылку, программист не в состоянии. Соответсвенно, об этом должны были позаботиться (и позаботились) разработчики ADO.

У меня возникло предположение, что ты клепаешь на Access. Так вот, в ADP A2K есть такой нюанс, имеющий косвенное отношение к затронутой теме. Рассмотрим два фрагмента кода:
1)
Dim CM As ADODB.Command
CM.ActiveConnection = CurrentProject.BaseConnectionString
2)
Dim CM As ADODB.Command
Set CM.ActiveConnection = CurrentProject.Connection

В первом случае свойству ActiveConnection присваивается строковое значение. При выполнении метода CM.Execute Access динамически создаст отдельный объект Connection, который имеет такую же строку соединения, как CurrentProject.BaseConnectionString и автоматом грохнет этот объект, как только необходимость в нем отпадет.
Во втором случае свойству ActiveConnection присваивается НЕ строковое значение, а ссылка на существующий объект Connection. В этом случае при выполнении метода CM.Execute будет задействовано главное соединение проекта (CurrentProject.Connection) и отдельный объект Connection динамически создаваться не будет.
...
Рейтинг: 0 / 0
Помогите. плиз
    #32031586
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4 Garya

Получается. что если
con.open....
con.Execute (....)

создается динамический объект (о котором я и не подозревал). причем для этого
объекта используется совсем другое соединение (не само соединение con)?
...
Рейтинг: 0 / 0
Помогите. плиз
    #32031870
Smile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4 Garya

Клиента я пишу на VB6.
Я использовал con.execute в одном случае
и

....
command.connection=con
.....
command.execute

В обоих случаях в Error Logs записывался лог об удачном соединении с сервером.
Значит отдельное соединение создается в обоих случаях?

Да и при выполнении какого-нить запроса в query tool в Error Logs тоже пишется лог об удачном соединении.
И такая запись делается для каждого запроса.

Проясни ситуацию, плиз, если не трудно!
...
Рейтинг: 0 / 0
Помогите. плиз
    #32031974
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Соединения могут быть удачными вне зависимости от их количества. Может быть два удачных соединения, а может быть одно.
Допустим, ты уже имеешь открытое соединение с сервером con (открыл один раз на все время работы приложения). Если ты присвоишь свойству Command СТРОКУ СОЕДИНЕНИЯ, взятую из данного соедиенения, то выполнении Command.Execute у тебя автоматически откроется еще один коннекшн с точно такой же строкой соединения как у уже открытого. А если ты выставишь ССЫЛКУ на открытый коннекшн, то именно он и будет использоваться для соединения с сервером при выполнении Command.Execute.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите. плиз
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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