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

Откуда:
Сообщений: 53
Здравствуйте! Помогите найти проблему, мучаюсь уже месяц. Может свежий взгляд на проблему поможет. Суть проблемы состоит в том, что у меня есть проект на C++Builder и база Microsoft SQL Server 2000 - 8.00.194 (Intel X86) Aug 6 2000 00:57:48 Copyright (c) 1988-2000 Microsoft Corporation Developer Edition on Windows NT 6.0 (Build 6001: Service Pack 1), клиентов около 20. У пару клиентов как-то некорректно стали выполняться запросы (см. код дальше), у меня всё проходит отлично, рассчитывается правильно. В чем может быть проблема? Вот код запросов
DtMdMain->ADOCommand1->CommandText="SELECT k.kod_ab,\
nach_sum=isnull(nach_sum+nach_akt+nach_303+nach_ust+nach_plomb,0),   \
nach_akt=isnull(nach_akt,0),saldo=isnull(saldo,0), \
                                            opl=convert(float,0),kor=convert(float,0),saldo_r=0,potr=0,month_potr=0 \
                                     into tmp_tbl1_"+ComputerName.Trim()+" \
                                     FROM kart k,nach_"+IntToStr(tmp_year)+" n                \
                                     where ((year(k.date_ins)="+IntToStr(WorkYear)+" and month(k.date_ins)<="+IntToStr(WorkMonth)+") or year(k.date_ins)<"+IntToStr(WorkYear)+" or year(k.date_ins) is null) \
                                       and ((year(k.date_del)="+IntToStr(WorkYear)+" and month(k.date_del)>="+IntToStr(WorkMonth)+") or year(k.date_del)>"+IntToStr(WorkYear)+" or year(k.date_del) is null) \
                                       and (((year(k.date_dead_prom)="+IntToStr(WorkYear)+" and month(k.date_dead_prom)>="+IntToStr(WorkMonth)+") or year(k.date_dead_prom)>"+IntToStr(WorkYear)+" or year(k.date_dead_prom) is null) \
                                             or k.dead_prom=4)\
                                       and k.kod_ab*=n.kod_ab and mes="+IntToStr(tmp_month)+" \
                                     order by k.kod_ab";
 FormMain->StatusBar1->SimpleText = "Выборка лицевых сч для начисления во врем табл...";

 try{ DtMdMain->ADOCommand1->Execute();}
 catch(const Exception &E){MessageDlg(E.Message+"\nОшибка при расчете nach_sum!", mtError, TMsgDlgButtons() << mbOK , 0);goto abort;}
Записи, где nach_ust>0 nach_sum не рассчитывается или рассчитывается неправильно. В итоге saldo рассчитывается как будто с нулевым nach_sum
 DtMdMain->ADOCommand1->CommandText="update nach_"+IntToStr(WorkYear)+" set saldo = t1.saldo+t1.nach_sum-t1.nach_akt-isnull(t1.opl,0)+isnull(t1.kor,0), saldo_r = t1.saldo_r \
                                          from tmp_tbl1_"+ComputerName.Trim()+" t1 where nach_"+IntToStr(WorkYear)+".kod_ab=t1.kod_ab and mes="+IntToStr(WorkMonth);

Не могу отловить ошибку, так как выполняя пошагово проект у себя всё рассчитывается верно. Помогите, пожалуйста!
20 июн 12, 09:49    [12743253]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти проблему!  [new]
Nelya_Kost
Member

Откуда:
Сообщений: 53
Опережая некоторые вопросы по проекту, хочу пояснить, что все условия после конструкции WHERE как в первом, так и во втором условии выполняется. Ни одно из слагаемых в конструкции
nach_sum=isnull(nach_sum+nach_akt+nach_303+nach_ust+nach_plomb,0)
не принимает значение NULL. При выполнении запросов у клиентов ошибки не выходит.
20 июн 12, 09:54    [12743287]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти проблему!  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2421
Nelya_Kost,

Сделайте логирование кода выполняемых скриптов, и посмотрите что на самом деле выполняемт сервер, глядишь всё проянится.
20 июн 12, 10:36    [12743668]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти проблему!  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
включи профайлер и посмотри какой запрос генерируется у тех пользователей. А вообще лучше надо использовать параметризованные запросы, а параметры задавать через какое-нибудь TAdoQuery и емнип там есть свойство Parameters с коллекцией параметров.
20 июн 12, 10:37    [12743683]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти проблему!  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
Вот это - 8.00.194 - тоже стыд и срам.
20 июн 12, 11:00    [12743917]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти проблему!  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Гавриленко Сергей Алексеевич
Вот это - 8.00.194 - тоже стыд и срам.


это экстрим
20 июн 12, 11:08    [12743989]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти проблему!  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Вообще-то пробелма уже найдена, начиная с версии сервера. осталось найти решение...
20 июн 12, 11:09    [12743992]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти проблему!  [new]
Jaffar
Member

Откуда:
Сообщений: 633
Дурной стиль при проектировании интерфейса клиента и сервера.

Не используйте прямого sql кода в клиенте - лучше процедура с параметрами, если их много(параметров) - можно исп. 1 параметр xml.

если запрос нужен донамический - динамьте его в процедуре.
20 июн 12, 12:09    [12744696]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти проблему!  [new]
Jaffar
Member

Откуда:
Сообщений: 633
да и сам запрос написан очень уж криворуко.

хотя если у вас в таблице 100 записей - то сойдет.
20 июн 12, 12:11    [12744716]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти проблему!  [new]
Nelya_Kost
Member

Откуда:
Сообщений: 53
проще всего сослаться на старую версию сервера и закрыть тему.
20 июн 12, 13:12    [12745237]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти проблему!  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
Nelya_Kost
проще всего сослаться на старую версию сервера и закрыть тему.
Проще думать, что в версии сервера, для которого потом выпустили аж 4 сервиспака, были только ошибки, которые вас никак не касаются.

Сообщение было отредактировано: 20 июн 12, 13:15
20 июн 12, 13:15    [12745268]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти проблему!  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
Nelya_Kost
проще всего сослаться на старую версию сервера и закрыть тему.

Ну так для начала с профайлером поработать и понять чем отличаются запросы с вашей и с пользовательских машин, не? Ну и версия сервера, конечно да.
20 июн 12, 13:25    [12745388]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти проблему!  [new]
Nelya_Kost
Member

Откуда:
Сообщений: 53
я пока не могу поменять версию сервера
20 июн 12, 13:30    [12745433]     Ответить | Цитировать Сообщить модератору
 Re: Помогите найти проблему!  [new]
Nelya_Kost
Member

Откуда:
Сообщений: 53
Спасибо всем за участие!Проблема была в настройках программы, а не в запросах!
Тема закрыта!
27 июн 12, 12:07    [12781573]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить