RDO возвращает не все значения. В чем может быть проблема? VB 6.0 и MS SQL server 2000
Формулировка задачи:
Есть ХП zpsp_BolnList2009, которая производит расчет начислений и калелендарных дней для рассчета среднедневной зарплаты по больничному. Она возвращает данные за последний год до начала больничного.
Вчера столкнулся с ситуацией, когда recordset возвратил не 12 записей, а десять, в то время как в Query Analyzer процедура возвратила все 12 записей. Это проявилось только в одном случае из 10 тестов с разными исходными данными. В чем может быть проблема? Может быть, кто-нибудь сталкивался с подобным?
Вот код:
Готов ответить на уточняющие вопросы. Заранее спасибо.
Вчера столкнулся с ситуацией, когда recordset возвратил не 12 записей, а десять, в то время как в Query Analyzer процедура возвратила все 12 записей. Это проявилось только в одном случае из 10 тестов с разными исходными данными. В чем может быть проблема? Может быть, кто-нибудь сталкивался с подобным?
Вот код:
Готов ответить на уточняющие вопросы. Заранее спасибо.
Решение задачи: «RDO возвращает не все значения. В чем может быть проблема? VB 6.0 и MS SQL server 2000»
textual
Листинг программы
-- расчет количества календарных дней за <font color="darkblue"><b>12</b></font> предыдущих месяцев CREATE TABLE #tmp4 (day tinyint, tn smallint, mes tinyint, year smallint) INSERT #tmp4(day, tn, mes, year) <font color="blue">SELECT</font> <font color="darkblue"><b>0</b></font>, tn, month(<font color="blue">date</font>), year(<font color="blue">date</font>) FROM #tmp3 WHERE tn=@tn <font color="blue">AND</font> <font color="blue">date</font> BETWEEN @firstdate <font color="blue">AND</font> @lastdate GROUP BY tn, month(<font color="blue">date</font>), year(<font color="blue">date</font>) ORDER BY year(<font color="blue">date</font>), month(<font color="blue">date</font>) <font color="blue">SELECT</font> countday= COUNT(p), tn, mes=month(<font color="blue">date</font>), year=year(<font color="blue">date</font>) INTO #tmp100 FROM #tmp3 WHERE tn=@tn <font color="blue">AND</font> <font color="blue">date</font> BETWEEN @firstdate <font color="blue">AND</font> @lastdate <font color="blue">AND</font> p <font color="blue">NOT</font> <font color="blue">IN</font> (<font color="00AA00">'Б','О','А','У','Р','Д','Е','Я') </font> GROUP BY tn, month(<font color="blue">date</font>), year(<font color="blue">date</font>) UPDATE #tmp4 <font color="blue">SET</font> day =countday FROM #tmp100 a INNER JOIN #tmp4 b <font color="blue">ON</font> a.mes = b.mes <font color="blue">AND</font> a.year = b.year --<font color="blue">select</font> * from #tmp4 --<font color="blue">select</font> * from #tmp100 -- расчет начислений за <font color="darkblue"><b>12</b></font> предыдущих месяцев <font color="blue">DECLARE</font> @nachislrows tinyint <font color="blue">WHILE</font> @cnt_mes<=<font color="darkblue"><b>12</b></font> BEGIN <font color="blue">SELECT</font> @nachislrows= COUNT(tn) FROM zptb_nachisl WHERE zptb_nachisl.year=DATEPART(yy, DATEADD(mm, -@cnt_mes, @date_beg)) <font color="blue">AND</font> zptb_nachisl.mes=DATEPART(mm, DATEADD(mm, -@cnt_mes, @date_beg)) <font color="blue">AND</font> tn=@tn --<font color="blue">PRINT</font> @nachislrows <font color="blue">IF</font> @nachislrows = <font color="darkblue"><b>0</b></font> BEGIN INSERT #Tmp( Day, Summa, Prem, mes, year) <font color="blue">SELECT</font> #tmp4.day, <font color="darkblue"><b>0</b></font>, <font color="darkblue"><b>0</b></font>, #tmp4.mes, #tmp4.year FROM #tmp4 WHERE #tmp4.tn=@tn <font color="blue">AND</font> #tmp4.year=DATEPART(yy, DATEADD(mm, -@cnt_mes, @date_beg)) <font color="blue">AND</font> #tmp4.mes=DATEPART(mm, DATEADD(mm, -@cnt_mes, @date_beg)) <font color="blue">END</font> <font color="blue">ELSE</font> BEGIN INSERT #Tmp( Day, Summa, Prem, mes, year) <font color="blue">SELECT</font> #tmp4.day, SUM(<font color="blue">CASE</font> WHEN (zptb_nachisl.shifr <font color="blue">NOT</font> <font color="blue">IN</font> (<font color="darkblue"><b>5</b></font>, <font color="darkblue"><b>15</b></font>, <font color="darkblue"><b>106</b></font>, <font color="darkblue"><b>109</b></font>, <font color="darkblue"><b>110</b></font>, <font color="darkblue"><b>112</b></font>, <font color="darkblue"><b>114</b></font>, <font color="darkblue"><b>115</b></font>, <font color="darkblue"><b>116</b></font>, <font color="darkblue"><b>117</b></font>, <font color="darkblue"><b>118</b></font>, <font color="darkblue"><b>119</b></font>, <font color="darkblue"><b>125</b></font>, <font color="darkblue"><b>135</b></font>, <font color="darkblue"><b>137</b></font>, <font color="darkblue"><b>138</b></font>, <font color="darkblue"><b>140</b></font>, <font color="darkblue"><b>143</b></font>, <font color="darkblue"><b>144</b></font>) <font color="blue">AND</font> zptb_nachisl.shifr<<font color="darkblue"><b>500</b></font>) <font color="blue">THEN</font> summa <font color="blue">ELSE</font> <font color="darkblue"><b>0</b></font> <font color="blue">END</font>), <font color="darkblue"><b>0</b></font>, zptb_nachisl.mes, zptb_nachisl.year FROM zptb_nachisl, #tmp4 WHERE zptb_nachisl.tn=@tn <font color="blue">AND</font> #tmp4.tn=zptb_nachisl.tn <font color="blue">AND</font> zptb_nachisl.year=DATEPART(yy, DATEADD(mm, -@cnt_mes, @date_beg)) <font color="blue">AND</font> zptb_nachisl.mes=DATEPART(mm, DATEADD(mm, -@cnt_mes, @date_beg)) <font color="blue">AND</font> #tmp4.year=zptb_nachisl.year <font color="blue">AND</font> #tmp4.mes=zptb_nachisl.mes GROUP BY zptb_nachisl.year, zptb_nachisl.mes, #tmp4.day <font color="blue">END</font> <font color="blue">SELECT</font> @cnt_mes=@cnt_mes+<font color="darkblue"><b>1</b></font> <font color="blue">END</font>
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д