Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Непонятки с ХП  [new]
VeroNa
Member

Откуда:
Сообщений: 232
Здравтсвуйте!

На сервере стоит MS SQL Server 2008 R2 Express. На ней крутятся 2 пользовательские базы (БД справочников и БД с данными). Возникла задача написать формирование статистики по определенным данным. Я написала на сервере скрипт, проверила, всё работает... Запускаю тот же скрипт из клиента через ADO - оказываются не все данные просчитываются... Причем закономерность понять не могу - все данные, которые должны быть просчитаны - корректные....
Вот код запуска скрипта в Access:
       'открываем подключение к серверу
       cnMySQL.ConnectionString = Mid(myConnect, InStr(1, myConnect, "DRIVER"))
       cnMySQL.ConnectionTimeout = 300
       cnMySQL.CommandTimeout = 300
       cnMySQL.Open
       MyCat.ActiveConnection = cnMySQL
       
       'формируем скрипт для выполнения на стороне сервера предписаний
       myScript = "USE [" & Mid(myConnect, myNachPos + 9, (InStr(myNachPos + 1, myConnect, ";") - myNachPos - 9)) & "]" & vbCrLf
       myScript = myScript & "" & vbCrLf
       myScript = myScript & "SET ANSI_NULLS ON" & vbCrLf
       myScript = myScript & "SET QUOTED_IDENTIFIER ON" & vbCrLf
       myScript = myScript & "IF NOT EXISTS (SELECT NAME FROM tempdb.SYS.OBJECTS WHERE NAME LIKE " & "'##temp_" & myNameM & "_KIP')" & vbCrLf
       myScript = myScript & "BEGIN" & vbCrLf
       myScript = myScript & "CREATE TABLE [dbo].##temp_" & myNameM & "_KIP(" & vbCrLf
       myScript = myScript & Space(8) & "[Syskey] [int] IDENTITY(1,1) NOT NULL," & vbCrLf
       myScript = myScript & Space(8) & "[Код_Предпр] [int] NULL," & vbCrLf
       myScript = myScript & Space(8) & "[cdOTD] [int] NULL," & vbCrLf
       myScript = myScript & Space(8) & "[cdUCH] [int] NULL," & vbCrLf
       myScript = myScript & Space(8) & "[cdInsp] [int] NULL," & vbCrLf
       myScript = myScript & Space(8) & "[КодАкта] [int] NULL," & vbCrLf
       myScript = myScript & Space(8) & "[Ном_Акта] [nvarchar](50) NULL," & vbCrLf
       myScript = myScript & Space(8) & "[Дата_акта] [datetime] NULL," & vbCrLf
       myScript = myScript & Space(8) & "[ГодОбсл] [int] NULL," & vbCrLf
       myScript = myScript & Space(8) & "[МесяцОбсл] [int] NULL," & vbCrLf
       myScript = myScript & Space(8) & "[SysKeyAkt] [int] NULL," & vbCrLf
       myScript = myScript & Space(8) & "[ВсегоПредпис] [int] NULL," & vbCrLf
       myScript = myScript & Space(8) & "[ВыпПредпис] [int] NULL," & vbCrLf
       myScript = myScript & Space(8) & "[НовСрок] [int] NULL," & vbCrLf
       myScript = myScript & Space(8) & "[Невып] [int] NULL," & vbCrLf
       myScript = myScript & Space(8) & "[1СрокУстр] [datetime] NULL," & vbCrLf
       myScript = myScript & Space(8) & "[СрокПрошел] [int] NULL," & vbCrLf
       myScript = myScript & Space(8) & "[СрокНеПрошел] [int] NULL," & vbCrLf
       myScript = myScript & Space(8) & "[НетДатыУстр] [int] NULL," & vbCrLf
       myScript = myScript & "CONSTRAINT [PK_temp_" & myNameM & "_KIP] PRIMARY KEY CLUSTERED " & vbCrLf
       myScript = myScript & "([Syskey] ASC" & vbCrLf
       myScript = myScript & ")WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]" & vbCrLf
       myScript = myScript & ") ON [PRIMARY]" & vbCrLf
       myScript = myScript & "INSERT INTO [dbo].[##temp_" & myNameM & "_KIP] ([Код_Предпр],[cdOTD],[cdUch],[cdInsp],[КодАкта],"
       myScript = myScript & " [Ном_Акта],[Дата_акта],[ГодОбсл],[МесяцОбсл],[SysKeyAkt],[ВсегоПредпис],[ВыпПредпис],"
       myScript = myScript & " [НовСрок],[Невып],[СрокПрошел],[СрокНеПрошел],[НетДатыУстр]) " & vbCrLf
       myScript = myScript & "SELECT [Код_Предпр],[cdOTD],[cdUch],[cdInsp],[КодАкта],[Ном_Акта],[Дата_акта],"
        myScript = myScript & "[ГодОбсл],[МесяцОбсл],[SysKeyAkt],0 as [ВсегоПредпис],0 as [ВыпПредпис],"
        myScript = myScript & "0 as [НовСрок],0 as [Невып],0 as [СрокПрошел],0 as [СрокНеПрошел],0 as [НетДатыУстр]" & vbCrLf
       myScript = myScript & "FROM [dbo].[_Zapr_Union_Akt_Vse]" & vbCrLf
       myScript = myScript & "END;" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[Load_KIPNew] ;" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpisStat] 1, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpisStat] 2, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpisStat] 3, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpisStat] 4, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpisStat] 5, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpisStat] 6, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpisStat] 7, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpisStat] 9, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpisStat] 10, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpisStat] 11, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpisStat] 12, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpisStat] 16, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpisStat] 18, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpisStat] 22, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpis1Srok] 1, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpis1Srok] 2, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpis1Srok] 3, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpis1Srok] 4, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpis1Srok] 5, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpis1Srok] 6, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpis1Srok] 7, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpis1Srok] 9, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpis1Srok] 10, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpis1Srok] 11, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpis1Srok] 12, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpis1Srok] 16, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpis1Srok] 18, '##temp_" & myNameM & "_KIP';" & vbCrLf
       myScript = myScript & "EXECUTE [dbo].[MyPredpis1Srok] 22, '##temp_" & myNameM & "_KIP';" & vbCrLf
    
       'запускаем скрипт на сервере
       Set myCmd = New ADODB.Command
       Set myCmd.ActiveConnection = cnMySQL
       myCmd.CommandText = myScript
       myCmd.CommandType = adCmdText
       myCmd.CommandTimeout = 500
       myCmd.Execute , , adExecuteNoRecords
       
       Set myCmd = Nothing
       
       Set myRst = New ADODB.Recordset
       myRst.Open "##temp_" & myNameM & "_KIP", cnMySQL, adOpenStatic, , Options:=adCmdTable
       If myRst.RecordCount > 0 Then
            myConTemp = Mid(myConnect, 1, InStr(1, myConnect, "Teplo_Dan_") - 1) & "tempdb" & Mid(myConnect, InStr(1, myConnect, "Teplo_Dan_") + 15, Len(myConnect))
            'создаем ссылку на временную таблицу
            Set myDB = CodeDb
            Set theTableDef = myDB.CreateTableDef("##temp_" & myNameM & "_KIP")
            theTableDef.SourceTableName = "dbo.##temp_" & myNameM & "_KIP"
            theTableDef.Connect = myConTemp
            myDB.TableDefs.Append theTableDef
            myDB.TableDefs.Refresh
            
            'вставляем данные из временной таблицы в клиента
            strSQL = "INSERT INTO [Тепл_КИП] SELECT [##temp_" & myNameM & "_KIP].* from [##temp_" & myNameM & "_KIP]"
            DoCmd.RunSQL strSQL
            'удаляем ссылку на временную таблицу
            DoCmd.DeleteObject acTable, "##temp_" & myNameM & "_KIP"
            DoCmd.Restore
       End If
       myRst.Close
       
       myScript = "DROP TABLE ##temp_" & Trim(myNameM) & "_KIP" & vbCrLf
       'запускаем скрипт на сервере
       Set myCmd = New ADODB.Command
       myCmd.ActiveConnection = cnMySQL
       myCmd.CommandText = myScript
       myCmd.CommandType = adCmdText
       myCmd.CommandTimeout = 300
       myCmd.Execute
       
       Set myCmd = Nothing


Может быть, кто-нибудь сталкивался с такой ситуацией? Я уже не знаю куда копать, вроде бы всё нормально, права на все процедуры и на tempdb раздала...
2 мар 12, 11:14    [12181799]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с ХП  [new]
Glory
Member

Откуда:
Сообщений: 104751
VeroNa
Запускаю тот же скрипт из клиента через ADO - оказываются не все данные просчитываются...

Это текст ошибки ?

VeroNa
Вот код запуска скрипта в Access:

Где кроме Access вы проверяли, что собранный вами _серверный код_ работает правильно ?
2 мар 12, 11:18    [12181834]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с ХП  [new]
VeroNa
Member

Откуда:
Сообщений: 232
Glory
Это текст ошибки ?


Это текст запуска скрипта.
Ошибок никаких не выдает, просто по некоторым данным не рассчитывается статистика...


Glory
Где кроме Access вы проверяли, что собранный вами _серверный код_ работает правильно ?

Я проверяла работу скрипта на самом сервере - там по тем же самым данным статистика была рассчитана....
Тем более что я изначально писала скрипт на сервере, а только потом внедряла в Access...
2 мар 12, 12:26    [12182422]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с ХП  [new]
Glory
Member

Откуда:
Сообщений: 104751
VeroNa
Ошибок никаких не выдает, просто по некоторым данным не рассчитывается статистика...

Ну так проверяйте, какая из команд вашего скрипта выполняет логически неправильные действия.

VeroNa
Тем более что я изначально писала скрипт на сервере, а только потом внедряла в Access...

Теперь осталось сравнить, чтоже Access передает серверу на выполнение
2 мар 12, 12:28    [12182442]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с ХП  [new]
VeroNa
Member

Откуда:
Сообщений: 232
Glory
Теперь осталось сравнить, чтоже Access передает серверу на выполнение


Скрипт передается на выполнение правильный... Я это проверяла... Текст строки myScript запускала на сервере - всё считает абсолютно правильно...
2 мар 12, 12:42    [12182539]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с ХП  [new]
Glory
Member

Откуда:
Сообщений: 104751
VeroNa
Скрипт передается на выполнение правильный... Я это проверяла..

Если _все_ команды передаются и выполняются, то и результат правильный
По-другому быть не может
2 мар 12, 12:44    [12182550]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с ХП  [new]
Geep
Member

Откуда: Москва
Сообщений: 975
            'вставляем данные из временной таблицы в клиента
            strSQL = "INSERT INTO [Тепл_КИП] SELECT [##temp_" & myNameM & "_KIP].* from [##temp_" & myNameM & "_KIP]"
            DoCmd.RunSQL strSQL
            'удаляем ссылку на временную таблицу
            DoCmd.DeleteObject acTable, "##temp_" & myNameM & "_KIP"
            DoCmd.Restore

Попробуйте не удалять ссылку на временную и проверьте результат в ней.
2 мар 12, 13:03    [12182740]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с ХП  [new]
VeroNa
Member

Откуда:
Сообщений: 232
Geep
Попробуйте не удалять ссылку на временную и проверьте результат в ней.


Проверяла - неправильный....
Я и сама не могу понять как это так может быть - на сервере напрямую всё выполняется правильно, а через ADO - неправильно...
Прямо мистика какая-то... Может какое-то свойство в самом подключении как-то влияет на результат...
2 мар 12, 13:56    [12183259]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с ХП  [new]
Glory
Member

Откуда:
Сообщений: 104751
VeroNa
Я и сама не могу понять как это так может быть - на сервере напрямую всё выполняется правильно, а через ADO - неправильно...
Прямо мистика какая-то... Может какое-то свойство в самом подключении как-то влияет на результат...

Как вы проверили, что из ADO _попадает_ на сервер ?
2 мар 12, 13:58    [12183272]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с ХП  [new]
Geep
Member

Откуда: Москва
Сообщений: 975
смотрите профайлером, что приходит на сервер
2 мар 12, 15:26    [12184110]     Ответить | Цитировать Сообщить модератору
 Re: Непонятки с ХП  [new]
Geep
Member

Откуда: Москва
Сообщений: 975
Но лучше сделайте ХП и вызывайте уже откуда хотите.
2 мар 12, 15:32    [12184158]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить