RDO возвращает не все значения. В чем может быть проблема? VB 6.0 и MS SQL server 2000

Узнай цену своей работы

Формулировка задачи:

Есть ХП zpsp_BolnList2009, которая производит расчет начислений и калелендарных дней для рассчета среднедневной зарплаты по больничному. Она возвращает данные за последний год до начала больничного.
Вчера столкнулся с ситуацией, когда 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>

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.667 из 5
Похожие ответы