powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите с Recordset-ом
25 сообщений из 26, страница 1 из 2
Помогите с Recordset-ом
    #36639748
Alise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!)Помогите пожалуйста!.
Я делаю выборку в VB6 из базы данных MS SQL server в рекордсет, потом по каждому полю рекордсета нахожу среднее значение.А теперь мне надо эти средние значения поместить в новый рекордсет,что в дальнейшем к ним обращаться.
Вот код для нахождения среднего значения


Set sred = Conn.Execute("Select сol1,col2,col3,col4 from Forma2 inner join Nalogoplatelchik on Forma2.INN=Nalogoplatelchik.INN where (Forma2.OtchetniiGod=" & a1 & ") and (Nalogoplatelchik.UN_OKVED_osnov=" & c & ")")
j = 0
For i = 0 To sred.EOF
sred.MoveFirst
s = 0
Do While Not sred.EOF
If i = 0 Then j = j + 1
If Not IsNull(sred.Fields(i).Value) Then s = s + sred.Fields(i).Value
sred.MoveNext
Loop
sr = sr + s / j
Next


И вообще правильно ли я нахожу среднее по стобцу??
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36639766
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Во-первых в SQL есть функция AVG
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36639769
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2) Во-вторых, вы уверены, что результат вы хотите поместить в рекордсет, а не в таблицу в базе данных?
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36639791
Alise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы предлагаете поместиь их таблицу, а потом обратно делать выорку уже из это таблицы??Я еще об этом не думала))Спасибо)А программа не будет каждый раз пересчитывая дублировать данные в таблице???
среднее должно подсчитываться с учетом года и кода ОКВЭД
Было бы хорошо,чтобы это хранилось потом в аблице..а как сделать...чтоб программа подсчитала их 1 раз и потом не пересчитывала
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36639795
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем примерно так:

Код: plaintext
1.
2.
Conn.Execute("Select AVG(сol1) AS Col1, AVG(col2) AS Col2, AVG(col3) AS Col3, AVG(col4) " + _
"AS Col4 INTO NewTable from Forma2 inner join Nalogoplatelchik on Forma2.INN=Nalogoplatelchik.INN " + _
"where (Forma2.OtchetniiGod=" & a1 & ") and (Nalogoplatelchik.UN_OKVED_osnov=" & c & ")")

и вы получаете таблицу NewTable с готовыми средними значениями
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36639801
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AliseА программа не будет каждый раз...???

Так это же ваша программа. Как напишете, так и будет.
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36639811
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AliseВы предлагаете поместиь их таблицу, а потом обратно делать выорку

Я вообще не вижу необходимости помещать это в таблицу. Если только конечно у вас не миллион записей в таблице. Делайте запрос - получайте сразу средние значения, а не высчитывайте их на клиенте.
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36639876
Alise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо большое!!))Я попробую:)
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36640160
Alise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Каждый раз ,как программа запускается создается новая таблица???теперь VB ругается,что такая таблица уже существует..
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36640200
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AliseКаждый раз ,как программа запускается создается новая таблица???теперь VB ругается,что такая таблица уже существует..

Я предложил вам несколько вариантов, определитесь, какой вам нужен.
Либо делайте предварительно DROP TABLE, либо уберите INTO
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36640427
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЛибо делайте предварительно DROP TABLE, либо уберите INTOЕсли не ошибаюсь, drop нужно делать и перед into.
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36640429
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyShocker.ProЛибо делайте предварительно DROP TABLE, либо уберите INTOЕсли не ошибаюсь, drop нужно делать и перед into.

Зачем? Если таблицы нет, DROP вызовет ошибку.
Так что, либо DROP, но тогда еще ваять проверку, либо DROP, точно зная, что таблицы нет, либо просто убрать INTO.

Насколько я понимаю, автору нужен как раз третий вариант, без создания лишней таблицы.
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36640940
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не ошибаюсь. Если таблица уже существует, select into вызовет ошибку.
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36640962
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyНе ошибаюсь. Если таблица уже существует, select into вызовет ошибку.

Вызовет. Я что, против что ли?
Я же предложил автору либо дропать, либо убрать INTO

ДРУГОЙ вопрос, что если таблица не существует, то DROP тоже вызовет ошибку.
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36640989
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Shocker.Pro
> > Antonariy
> > Не ошибаюсь. Если таблица уже существует, select into вызовет ошибку.
> Вызовет. Я что, против что ли?
> Я же предложил автору либо дропать, либо убрать INTO
>
> ДРУГОЙ вопрос, что если таблица не существует, то DROP тоже вызовет ошибку.

Куда не кинь, везде клин.

А что batch'и уже отменили?
Что-бы проверить если объект есть, дропнуть или что-бы не дропать несуществующий объект :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36641075
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь ГорбоносА что batch'и уже отменили?
Что-бы проверить если объект есть, дропнуть или что-бы не дропать несуществующий объект :)


Шота мы переливаем из пустого в порожнее. Я про это уже писал.
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36642518
Alise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
просто Drop не помогает))!я пробовала применить и Drop(перед запросом,чтоб он удалял эту таблицу) и Into одновременно.Работает))Если дальше с этой таблицей не проводить никаких операций))А если проводить, то появляется ошибка "Операция не допускается,если объект закрыт"
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36642521
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aliseпросто Drop не помогает))!я пробовала применить и Drop(перед запросом,чтоб он удалял эту таблицу) и Into одновременно.Работает))Если дальше с этой таблицей не проводить никаких операций))А если проводить, то появляется ошибка "Операция не допускается,если объект закрыт"

для устранения этой ошибки требуется
set nocount on
в начале пакета.

сложно советовать, когда вы не приводите код.
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36642608
Alise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это я тоже пробовала, та же ошибка..пишет объект закрыт.А если убрать sred.moveFirst- ошибка"Не удается найти объект в семействе, соответствующий требуемому имени и порядковому номеру "
В приведенном коде нахожу стандартное отклонение sigma=корень из суммы(xi-xsred)^2/n

Private Sub CommandButton1_Click()
Dim Conn As ADODB.Connection, f, doh, sred, sred1, sred2, sred3 As Recordset
Dim strConn As String, i, j, l As Long, v, NS As Variant
Dim ss(1 To 50) As Long, so(1 To 50) As Variant, NN(1 To 50) As Variant, sr, s, N As Long, sigma As Double

If (okved.Text = "") And (Inn.Text = "") And (God1.Text = "") And (God2.Text = "") And (God3.Text = "") Then
MsgBox "Введите параметры для расчета"
Else
If okved.Text = "" Then
MsgBox "Введите ОКВЭД"
Else

Set Conn = New ADODB.Connection

strConn = "PROVIDER=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;"
strConn = strConn & "Data Source=ALISA-2B337005A;INITIAL CATALOG=Nalog;"
strConn = strConn & "User ID=;Password=;"
Conn.ConnectionString = strConn
Conn.Open
c = okved.Text
b = Inn.Text
a1 = God1.Text
a2 = God2.Text
a3 = God3.Text

'srednee
Set sred = Conn.Execute("set nocount on")
Set sred = Conn.Execute("Drop table Srednee")

Set sred = Conn.Execute("Select avg(Viruchka) as Viruchka,avg(ProcentiKpolucheniu) as ProcentiKpolucheniu,avg(ProchieDohodi) as ProchieDohodi," + _
"avg(DohodiOtUchastiyaVdrugihOrg) as DohodiOtUchastiyaVdrugihOrg,avg(PribilUbitokOtProdag) as ПрибыльУбыток_от_продаж," + _
"avg(PribilUbitokDoNO)as PribilUbitokDoNO,avg(SebestoimostProdTovarov)as SebestoimostProdTovarov,avg(KomerchesRashodi) as KomerchesRashodi," + _
"avg(UpravlenRashodi)as UpravlenRashodi,avg(ProchieRashodi) as ProchieRashodi," + _
"avg(ProcentiKUplate) as ProcentiKUplate into Srednee from Forma2 inner join Nalogoplatelchik on Forma2.INN=Nalogoplatelchik.INN" + _
" where (Forma2.OtchetniiGod=" & a1 & ") and (Nalogoplatelchik.UN_OKVED_osnov=" & c & ")and (UpravlenRashodi is not null ) group by OtchetniiGod, UN_OKVED_osnov")

Set f = Conn.Execute("Select Viruchka,ProcentiKpolucheniu,ProchieDohodi," + _
"DohodiOtUchastiyaVdrugihOrg,PribilUbitokOtProdag," + _
"PribilUbitokDoNO,SebestoimostProdTovarov,KomerchesRashodi," + _
"UpravlenRashodi,ProchieRashodi," + _
"ProcentiKUplate from Forma2 inner join Nalogoplatelchik on Forma2.INN=Nalogoplatelchik.INN" + _
" where (Forma2.OtchetniiGod=" & a1 & ") and (Nalogoplatelchik.UN_OKVED_osnov=" & c & ")and (UpravlenRashodi is not null )")

'sigma
sred.MoveFirst
sr = 0
j = 0
For j = 0 To 3
sr = sr + sred.Fields(j).Value
'sred.Fields(0).Value sred.Fields(1).Value + sred.Fields(2).Value + sred.Fields(3).Value
Next
sred.MoveNext
RPsr = sred.Fields(4).Value / sr

f.MoveFirst
i = 0
s = 0
For i = 0 To f.EOF

Do While Not f.EOF
v = f.Fields(0).Value + f.Fields(1).Value + f.Fields(2).Value + f.Fields(3).Value
RP = f.Fields(4).Value / v
ss(i) = RP
NN(i) = (ss(i) - RPsr) ^ 2
s = s + NN(i) / i
i = i + 1
j = j + 1
f.MoveNext
Loop
Next
MsgBox s
sigma = Sqr(s)
MsgBox sigma
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36642614
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нельзя ли правильно оформлять код? И вообще, почитать правила форума?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
Private Sub CommandButton1_Click()
Dim Conn As ADODB.Connection, f, doh, sred, sred1, sred2, sred3 As Recordset
Dim strConn As String, i, j, l As Long, v, NS As Variant
Dim ss( 1  To  50 ) As Long, so( 1  To  50 ) As Variant, NN( 1  To  50 ) As Variant, sr, s, N As Long, sigma As Double

If (okved.Text = "") And (Inn.Text = "") And (God1.Text = "") And (God2.Text = "") And (God3.Text = "") Then
MsgBox "Введите параметры для расчета"
Else
If okved.Text = "" Then
MsgBox "Введите ОКВЭД"
Else

Set Conn = New ADODB.Connection

strConn = "PROVIDER=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;"
strConn = strConn & "Data Source=ALISA-2B337005A;INITIAL CATALOG=Nalog;"
strConn = strConn & "User ID=;Password=;"
Conn.ConnectionString = strConn
Conn.Open
c = okved.Text
b = Inn.Text
a1 = God1.Text
a2 = God2.Text
a3 = God3.Text

'srednee
Set sred = Conn.Execute("set nocount on")
Set sred = Conn.Execute("Drop table Srednee")

Set sred = Conn.Execute("Select avg(Viruchka) as Viruchka,avg(ProcentiKpolucheniu) as ProcentiKpolucheniu,avg(ProchieDohodi) as ProchieDohodi," + _
"avg(DohodiOtUchastiyaVdrugihOrg) as DohodiOtUchastiyaVdrugihOrg,avg(PribilUbitokOtProdag) as ПрибыльУбыток_от_продаж," + _
"avg(PribilUbitokDoNO)as PribilUbitokDoNO,avg(SebestoimostProdTovarov)as SebestoimostProdTovarov,avg(KomerchesRashodi) as KomerchesRashodi," + _
"avg(UpravlenRashodi)as UpravlenRashodi,avg(ProchieRashodi) as ProchieRashodi," + _
"avg(ProcentiKUplate) as ProcentiKUplate  into Srednee from Forma2 inner join Nalogoplatelchik on Forma2.INN=Nalogoplatelchik.INN" + _
" where  (Forma2.OtchetniiGod=" & a1 & ") and (Nalogoplatelchik.UN_OKVED_osnov=" & c & ")and (UpravlenRashodi is not null ) group by  OtchetniiGod, UN_OKVED_osnov")

Set f = Conn.Execute("Select Viruchka,ProcentiKpolucheniu,ProchieDohodi," + _
"DohodiOtUchastiyaVdrugihOrg,PribilUbitokOtProdag," + _
"PribilUbitokDoNO,SebestoimostProdTovarov,KomerchesRashodi," + _
"UpravlenRashodi,ProchieRashodi," + _
"ProcentiKUplate from Forma2 inner join Nalogoplatelchik on Forma2.INN=Nalogoplatelchik.INN" + _
" where  (Forma2.OtchetniiGod=" & a1 & ") and (Nalogoplatelchik.UN_OKVED_osnov=" & c & ")and (UpravlenRashodi is not null )")

'sigma
sred.MoveFirst
sr =  0 
j =  0 
For j =  0  To  3 
sr = sr + sred.Fields(j).Value
'sred.Fields(0).Value sred.Fields(1).Value + sred.Fields(2).Value + sred.Fields(3).Value
Next
sred.MoveNext
RPsr = sred.Fields( 4 ).Value / sr

f.MoveFirst
i =  0 
s =  0 
For i =  0  To f.EOF

Do While Not f.EOF
v = f.Fields( 0 ).Value + f.Fields( 1 ).Value + f.Fields( 2 ).Value + f.Fields( 3 ).Value
RP = f.Fields( 4 ).Value / v
ss(i) = RP
NN(i) = (ss(i) - RPsr) ^  2 
s = s + NN(i) / i
i = i +  1 
j = j +  1 
f.MoveNext
Loop
Next
MsgBox s
sigma = Sqr(s)
MsgBox sigma
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36642617
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неправильно:
Код: plaintext
Dim sred1, sred2, sred3 As Recordset

правильно (касаемо других переменных - тоже)
Код: plaintext
Dim sred1 As ADODB.Recordset, sred2 As ADODB.Recordset, sred3 As ADODB.Recordset


бессмысленно:
Код: plaintext
Set sred = Conn.Execute("set nocount on")
эта команда должна быть в одном пакете с остальными. То есть Execute на всех один.
Лучше, конечно, сделать процедуру на сервере и пихать весь SQL-код туда. Если не хотите процедуру делать, наполняйте нужную текстовую переменную, а потом выполняйте одним Execute
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36642629
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aliseэто я тоже пробовала, та же ошибка..пишет объект закрыт.А если убрать sred.moveFirst- ошибка"Не удается найти объект в семействе, соответствующий требуемому имени и порядковому номеру "

Не очень понятно, что вы хотите от рекордсета sred
Пока ваш код вернет его пустым в любом случае, потому что select... into не возвращает данные в клиента, он просто формирует таблицу на сервере.

Поэтому, если вы хотите получить средние значения в рекордсете sred, либо пишите в конце пакета "select * from Srednee", либо уж избавьтесь вообще от таблицы Srednee: уберите "drop table", уберите "into Srednee", тогда в рекордсете sred вы будете получать ваши средние значения (и set nocount on тоже не понадобится)
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36642635
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AliseВ приведенном коде нахожу стандартное отклонение

И третий момент, а вам вообще нужно всю эту муть писать?
В SQL есть агрегатная функция STDEV - стандартное отклонение. Она все посчитает за вас.
...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36642637
Alise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sorry,забыла:(
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
'sigma
sred.MoveFirst  [color=red]'здесь выходит ошибка 3704 "Операция не допускается, если объект закры"[/color]
sr =  0 
j =  0 
For j =  0  To  3 
sr = sr + sred.Fields(j).Value
'sred.Fields(0).Value sred.Fields(1).Value + sred.Fields(2).Value + sred.Fields(3).Value
Next
sred.MoveNext
RPsr = sred.Fields( 4 ).Value / sr

Убираю sred.MoveFirst и sred.MoveNext
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
sr =  0 
j =  0 
For j =  0  To  3 
sr = sr + sred.Fields(j).Value 'ошибка 3265 "Не удается найти объект в семействе, соответствующий требуемому имени или порядковому номеру"
'sred.Fields(0).Value sred.Fields(1).Value + sred.Fields(2).Value + sred.Fields(3).Value
Next
sred.MoveNext
RPsr = sred.Fields( 4 ).Value / sr

...
Рейтинг: 0 / 0
Помогите с Recordset-ом
    #36642641
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alise, я ответил уже выше, прочтите посты, которые появились, пока вы писали свой.
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите с Recordset-ом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]