LEADERSOFT.ru Разработка на заказ программ и сайтов
Форумы по информационным технологиям
 
Регистрация  |  Вход
left
Форумы Минимизировать
ПоискСписок форумов
  Программирование  Microsoft Access. Файлы mdb и accdb  Тема: Условие о...
 Тема: Условие отбора в SQL строке
 
 15.06.2007 21:09:46
All
4316 сообщения
1-ый


Тема: Условие отбора в SQL строке
Решаю бухгалтерскую задачу(складской учет). Нужно расчитывать себестоимость. Как известно в течении одного дня на предприятие может поступить один и тотже товар, но от разных поставщиков. Поэтому существует вероятность не равенства цен приобретения по оприходуемым товарам.

К делу. Я решил, что лучше всего хранить значение себестоимости товара в отдельной таблице. Что-бы иметь возможность найти последнее значение себестоимости товара, даже если он приобретался в один день, значение в поле таблицы fDate записываются в формате Double. В форме дата представлена в формате vbGeneralDate(05/10/2005 9:45:50).
Таблица имеет вид:

...Наименование...|.....ID.....|.....fIdGood......|.....fIdFirm.....|.....Date.....|.....fPrime.....|
--------------------------------------------------------------------------------------------------------
...Формат.........|...Счетчик..|......Long........|......Long.......|....Double....|.....Double.....|

Для расчета себестоимости по поступившиму товару произвожу поиск себестоимости на дату < даты поступления товара.

Public Function mLoad(ByVal argIdFirm As Long, _
ByVal argDate As Double, _
ByVal argIdGood As Long) As Boolean

Dim RS As ADODB.Recordset
Dim strSQL As String

On Error GoTo MyErr


strSQL = "SELECT TOP 1 tblPrime.fIdSubFrm, tblPrime.fPrime FROM tblPrime WHERE ((tblPrime.fIdFirm) = " & argIdFirm & ") AND ((tblPrime.fDate) < " & argDate & ") AND
((tblPrime.fIdGood)= " & argIdGood & ") ORDER BY tblPrime.fDate DESC"

Set RS = New ADODB.Recordset

With RS

.Source = strSQL
.ActiveConnection = CurrentProject.Connection
.CursorLocation = adUseServer
.CursorType = adOpenStatic
.LockType = adLockReadOnly
.Open

If Not (.EOF And .BOF) Then
strIdSubFrm = !fIdSubFrm
varPrime = !fPrime
End If

End With

mLoad = True

ExitHere:

RS.Close
Set RS = Nothing

MyErr:
Resume ExitHere
End Function

Во время открытия таблицы происходит ошибка - "Ошибка синтаксиса(запятая)в выражении запроса'((tblPrime.fIdFirm) = 1) AND ((tblPrime.fDate) < 38596,8644097222) AND
((tblPrime.fIdGood)= 3)'"

Помогите справится с проблемой.
Задача с которой не я первый столкнулся. Может идея не верная, а может ума маловато.
Если есть опыт решения задачи подскажите.
Зарание благодарен.


P.S. Общий раздел по запросам
Автор: Luckiy от 0:00:00 Источник ...
 15.06.2007 21:09:46
All
4316 сообщения
1-ый


RE: Условие отбора в SQL строке
Замену запятой надо сделать:
strWhere = replace(".. 38596,8644097222",",",".")


P.S. Общий раздел по запросам
Автор: Admin от 0:00:00 Источник ...
 15.06.2007 21:09:46
All
4316 сообщения
1-ый


RE: Условие отбора в SQL строке
Удалось решить проблему поставив трое ковычек и заработало.

strSQL = "SELECT TOP 1 tblPrime.fIdSubFrm, tblPrime.fPrime FROM tblPrime WHERE ((tblPrime.fIdFirm) = " & argIdFirm & ") AND ((tblPrime.fDate) < """ & argDate & """) AND
((tblPrime.fIdGood)= " & argIdGood & ") ORDER BY tblPrime.fDate DESC"

Уто корреектоное решение проблемы или нет? Зарание спасибо.




P.S. Общий раздел по запросам
Автор: Luckiiy от 0:00:00 Источник ...
  Программирование  Microsoft Access. Файлы mdb и accdb  Тема: Условие о...
ПоискПоиск  Список форумовСписок форумов  
right