|
|
|
Помогите. плиз
|
|||
|---|---|---|---|
|
#18+
Для 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 не создается, и не какой ошибки не происходит, как буд-то она на самом деле создалась. Почему она не создается? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2002, 05:55:46 |
|
||
|
Помогите. плиз
|
|||
|---|---|---|---|
|
#18+
Это означает скорее всего, что сессия закрывается и, есно, удаляются автоматически все временные таблицы, созданные в этой сессии. А вот почему она закрывается, сказать сложно из-за недостатка информации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2002, 06:16:01 |
|
||
|
Помогите. плиз
|
|||
|---|---|---|---|
|
#18+
4 Dankov Да я то же так думаю. Но почему в одном случае она закрывается, а в другом нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2002, 09:37:31 |
|
||
|
Помогите. плиз
|
|||
|---|---|---|---|
|
#18+
Почему она не закрывается в одном из случаев - не знаю. Но должна закрываться. Просто потому, что ты для выполнения используешь не отдельный объект ADO Command, а используешь метод Execute объекта Connection. При этом динамически создается объект Command, команда выполняется, а созданный объект автоматом должен уничтожиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2002, 16:51:52 |
|
||
|
Помогите. плиз
|
|||
|---|---|---|---|
|
#18+
На вопрос почему, к сожалению так же ответить не могу. От себя хочу добавить, что если объявить рекордсет, а при его открытии писать вместо селекта - "CREATE TABLE #...." , то все замечательно работает (как и "UPDATE Table1 SET .....") и таблица живет до закрытия коннекта или до момента явного уничтожения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2002, 01:07:01 |
|
||
|
Помогите. плиз
|
|||
|---|---|---|---|
|
#18+
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'ы цепляться к рекордсетам, созданным на основе одного соединения. Но судя по всему, одним соединением можно обойтись не всегда? Если в своих предположениях я не ошибся, то придется искать другой способ, а если я не прав, поясни, плиз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2002, 17:04:27 |
|
||
|
Помогите. плиз
|
|||
|---|---|---|---|
|
#18+
Что конкретно происходит до и после брекпоинта, можно посмотреть с помощью 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 динамически создаваться не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2002, 18:06:16 |
|
||
|
Помогите. плиз
|
|||
|---|---|---|---|
|
#18+
4 Garya Получается. что если con.open.... con.Execute (....) создается динамический объект (о котором я и не подозревал). причем для этого объекта используется совсем другое соединение (не само соединение con)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.05.2002, 06:56:11 |
|
||
|
Помогите. плиз
|
|||
|---|---|---|---|
|
#18+
4 Garya Клиента я пишу на VB6. Я использовал con.execute в одном случае и .... command.connection=con ..... command.execute В обоих случаях в Error Logs записывался лог об удачном соединении с сервером. Значит отдельное соединение создается в обоих случаях? Да и при выполнении какого-нить запроса в query tool в Error Logs тоже пишется лог об удачном соединении. И такая запись делается для каждого запроса. Проясни ситуацию, плиз, если не трудно! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2002, 23:20:34 |
|
||
|
Помогите. плиз
|
|||
|---|---|---|---|
|
#18+
Соединения могут быть удачными вне зависимости от их количества. Может быть два удачных соединения, а может быть одно. Допустим, ты уже имеешь открытое соединение с сервером con (открыл один раз на все время работы приложения). Если ты присвоишь свойству Command СТРОКУ СОЕДИНЕНИЯ, взятую из данного соедиенения, то выполнении Command.Execute у тебя автоматически откроется еще один коннекшн с точно такой же строкой соединения как у уже открытого. А если ты выставишь ССЫЛКУ на открытый коннекшн, то именно он и будет использоваться для соединения с сервером при выполнении Command.Execute. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2002, 20:49:46 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32031870&tid=1822470]: |
0ms |
get settings: |
8ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
177ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 502ms |

| 0 / 0 |
