|
|
|
| недавно на ентом же форуме мне помогли с запросом на обновление.........
всЁ сработало просто на ура, и работает до сих пор............
вот листинг того запроса:
UPDATE Otgruzka SET Otgruzka.NomerKontrakta = [Forms].[Поиск].[NomerKontrakta], Otgruzka.PlatezhPoKontraktu = [Otgruzka].[PlatezhPoKontraktu]+[Forms].[Поиск].[SummaInvoisa]
WHERE (((Otgruzka.NomerInvoisa)=[Forms].[Поиск].[NomerRealInvoisa]));
сегодня сижу и пытаюсь прописать другой запрос на обновление, вот его листинг:
UPDATE Подчиненная_Ввоз, Подчиненная_Заказ SET Подчиненная_Заказ.ПлатежПоКонтракту = Подчиненная_Заказ.ПлатежПоКонтракту+Forms!Polycarbonate!Подчиненная_Ввоз.Form!СуммаИнвойса
WHERE (((Подчиненная_Заказ.НомерИнвойса)=[Forms]![Polycarbonate]![Подчиненная_Ввоз].[Form]![НомерРеалИнвойса]));
но что самое интересное, в чем собственно говоря проблема, он прибавляет удвоеное значение (Forms!Polycarbonate!Подчиненная_Ввоз.Form!СуммаИнвойса)...................
если оно равнялось 5 то он прибавит 10, если 7 то 14...........
можно конечно тупо складывать значение поделенно на два, но ведь енто не праваильно............
могет я накосячил, то простите меня............
я просто уже 12 часов за компом и вообще не соображаю............
а найти ошибку темболее .......................
могет подскажет почему двоит?.........
или енто у меня в мозгах уже двоит............. | |
|
| |
|
|
|
| скорее всего, в этом инвойсе 2 позиции
если будет 3 позиции - будет утроивать.
попробуйте построить построителем Ваш запрос и посмотреть кол-во записей, которое возвращает запрос.
РС
переходите на АДО - можно контролировать все операции | |
|
| |
|
|
|
| хорошо................
ваша догадка похоже оправдалась..............
я же теперь представляю как мне разобраться с ентим глюком............
когда разберусь окончательно обязательно отпишусь о результатах...................
но возникла другая сложность.......
я не знаю как подсчитать количество строк в форме (ленточная, подчиненная, на основе таблицы (НЕ запроса))............
как сделать в отчете я знаю а вот как в форме????? как то до ентого не доводилось...........
искал по форуму нашел одну ссылку..............
http://hiprog.com/access/article.asp?id=359
но она не рабочая..................
могет ктонить помочь?................. | |
|
| |
|
|
|
| эта ссылка не на кол-вл строк с таблице, а на нумерацию строк запроса:
http://hiprog.com/index.php?option=com_content&task=view&id=359&Itemid=35
кол-во записей в форме можно посчитать так:
http://hiprog.com/index.php?option=com_content&task=view&id=121 | |
|
| |
|
|
|
| Отказался я от запросов SQL. Перешел на ADO. Коду больше, но понятней и гибче(у Гетца - a great deal of flexibility ). | |
|
| |
|
|
|
|
Отказался я от запросов SQL. Перешел на ADO
|
мне кажется Вы путаете понятия.
ADO - механизм доступа к данным
SQL - язык запросов
можно отказаться от JET или DAO в пользу ADO, но никак от SQL в пользу ADO.
rst.open "select * from tbl" .....
это разве не SQL?
IMHO, исполнение запроса на обнолвение (методами JET, ADO или DAO), всегда быстрее чем построчная работа с рекордсетом. | |
|
| |
|
|
|
| >IMHO, исполнение запроса на обнолвение (методами JET, ADO
>или DAO), всегда быстрее чем построчная работа с
>рекордсетом.
Ну не всегда я считал сумму с накопление в запросе короче имел в запросе еще пару подчиненных запросв рассчитывал остатки на складе по дням для постороения графика и в конце перешел на заполнение временной таблицы с помощью рекордсета и остатки за 365 дней расчитываю для руководства на порядок быстрее чем запросом | |
|
| |
|
|
|
| >перешел на заполнение временной таблицы с помощью рекордсета
А если временную таблицу заполнять запросом на добавление, IMHO, будет еще быстрее.
Мое личное убеждение:
"всегда и везде, где возможно, использовать .EXECUTE вместо
.EDIT (.ADDNEW) + .UPDATE | |
|
| |
|
|
|
| >>перешел на заполнение временной таблицы с помощью
>рекордсета
>А если временную таблицу заполнять запросом на добавление,
>IMHO, будет еще быстрее.
>Мое личное убеждение:
>"всегда и везде, где возможно, использовать .EXECUTE
>вместо
>.EDIT (.ADDNEW) + .UPDATE
до этого так и было заполнял временную таблицу через запрос на добавления
Но возможно у меня случай особый там сначала запрос на объединение расхода и прихода да еще таблицы со всеми датами с нулями что бы, точно все даты присутствовали на графике | |
|
| |
|
|
|
| Если запрос на обновление обслуживает одну таблицу и расчеты относительно просты, то работать с ним легко, приятно и быстро: EXECUTE - будьте любезны. Если для расчета требуются данные из нескольких таблиц, данные подлежат проверке, обработке и пр. - без вложенных запросов врядли обойдешься, а это уже не так быстро работает. Конечно, я погорячился, заявив, что отказался от SQL, но в подобных случаях я выбираю ADO, открываю необходимое количество рекордсетов, некоторые из них просто служат массивами данных, а разумное использование курсора и методов блокировки дает хорошие результаты. Кроме того, в этом случае алгоритм расчета можно записать в таблицу, и для изменения параметров расчета достаточно добавить(удалить) строку, столбец, отредактировать таблицу ) а не редактировать код. Что же до: rst.Open "Select * from tbl", то можно rst.Open "tblName" | |
|
| |
|
|
|
| Так я ж не спорю. Просто это разные понятия SQL и ADO.
И так-то встрял только для того, что бы у начинающих, не возникло в голове каши из понятий SQL и ADO. | |
|
| |
|
|
|
| ничего себе дискуссия................
енто конечно приятно, что задета такая наболевшая тема.................
и людей она интересует, но ощущаю я себя честно говоря не лучшим бразом, как бы слегка малограмотным..................
так вот..........
вернумся к нашим баранам..................
я на форме приляпал кнопку34 и поле35...........
и на "нажате кнопки " повесил следующее....................
Private Sub кнопка34_Click()
Dim rstSrc As Recordset
Set rstSrc = Me.Form.RecordsetClone
If rstSrc.RecordCount < 1 Then ' нет записей в форме
MsgBox "в форме отсутствуют строки", vbInformation, "Ошибка"
Exit Sub
End If '.RecordCount < 1
With rstSrc
.MoveLast
.MoveFirst
End With
поле35.Value = rstSrc.RecordCount
End Sub
но при нажатии выдает ошибку :
compile error
user-defined type not defined.
ну так вот ...............
поумничали теоретически..........
пора бласнуть практическими знаниями..............
подскажите малограмотному самоучке.............
как говориться - сами мы не местные и т.д. и т.п................... | |
|
| |
|
|
|
| http://hiprog.com/index.php?option=com_content&task=blogcategory&id=119&Itemid=159
вопрос №2 | |
|
| |
|
|
|
| >http://hiprog.com/index.php?option=com_content&task=blogcategory&id=119&Itemid=159
>вопрос №2
>Отсюда вывод:
>нужно явно описывать тип рекордсета который вы будете использовать, тогда вы не будете >зависить от порядка подключения библиотек.
>dim srt as DAO.Recordset
>или
>dim rst as ADODB.recordset
пробовал оба варианта..............
тот же результат...............
причем выделяет желты строку
>Private Sub кнопка34_Click()
так в чем же ошибка.???........ | |
|
| |
|
|
|
| Вам нужно подключить библиотеку DAO | |
|
| |
|
|
|
| Public Function RecordCounter(frm As Form) As Variant
On Error GoTo ErrorHandler
Dim rs As DAO.Recordset
Set rs = frm.Recordset.Clone
If rs.BOF And rs.EOF Then
RecordCounter= "Нет записей"
Else
rs.MoveLast
rs.MoveFirst
RecordCounter=rs.RecordCount
End If
ErrorHandler:
Set rs = Nothing
If Err <> 0 Then
MsgBox Err.Source & "-->" & Err.Description, , "Ошибка"
End If
Private Sub кнопка34_Click()
поле35.Value = RecordCounter(Me)
End Sub | |
|
| |