Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблемы при связывании таблиц через VFP Driver / 20 сообщений из 20, страница 1 из 1
13.07.2016, 12:32
    #39272984
zenana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы при связывании таблиц через VFP Driver
Здравствуйте! На одном из компьютеров стала зависать программа при вычислении
DCount("полис", "пересеч", "полис='" & polis & "' and timport.dspc=datevalue('" & DSPC & "') and timport.dfpc=datevalue('" & DFPC & "')")
пересеч - запрос, в котором участвует связанная через ODBC таблица VFP
Причем ранее все работало, сейчас может для одной записи вычислить, а на другой зависнуть так, что приходится аварийно закрывать access, Ctrl+Break не помогает. На другом компьютере программа работает.
У меня через odbcad32 создан пользовательский DNS, использующий Microsoft Visual FoxPro Driver. Со вчерашнего дня на одной из машин он стал глючить, причем связанная через этот DNS таблица, открывается, запрос "пересеч" - открывается, а вот когда в запрос вставляешь условия из Dcount, начинает зависать. Пробовала заменять файл vfpodbc.dll, пробовала удалять и создавать заново DNS - не помогает. Если заменить связанную таблицу на локальную, все начинает работать. Но мне нужна именно связанная таблица, поскольку я не только считываю оттуда данные, но и редактирую, добавляю, использую эту таблицу во многих запросах. Всё же работало! Теперь на одном компьютере (основном) работа встала!!!
Помогите мне, пожалуйста, разобраться.
...
Рейтинг: 0 / 0
13.07.2016, 13:19
    #39273021
Проблемы при связывании таблиц через VFP Driver
zenanaDCount("полис", "пересеч", "полис='" & polis & "' and timport.dspc=datevalue('" & DSPC & "') and timport.dfpc=datevalue('" & DFPC & "')") В условии функции должны использоваться поля, возвращаемые указанной таблицей/запросом. Если запрос возвращает поля dspc и dfpc, то зачем вы указываете timport, а если не возвращает (т.е. прямое обращение к полям таблицы, входящей в запрос), то если функция и работает - такое поведение не документировано.
Кроме того рекомендую вместо datevalue использовать дату в формате MM.DD.YY с помощью функции Format.
Где используется функция и что такое DFPC и DSPC?
...
Рейтинг: 0 / 0
13.07.2016, 13:33
    #39273044
zenana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы при связывании таблиц через VFP Driver
Анатолий ( Киев ), запрос пересеч:
Код: sql
1.
2.
3.
SELECT IIf([gapu].[dspc]<=[timport].[dfpc] And [gapu].[dfpc]>=[timport].[dspc],True,False) AS Выражение1, timport.полис, timport.DSPC, timport.DFPC, gapu.dspc, gapu.dfpc, gapu.cd_lpu
FROM timport INNER JOIN gapu ON timport.полис = gapu.sn_pol
WHERE (((IIf([gapu].[dspc]<=[timport].[dfpc] And [gapu].[dfpc]>=[timport].[dspc],True,False))=True) AND ((gapu.cd_lpu)=79));

В запросе DFPC и DSPC - поля, которые присутствуют в обеих таблицах, поэтому указываю timport.dfpc
В функции DCount DFPC и DSPC - это даты
Вообще у меня создана пользовательская функция, которая выводит какие имеются ошибки для записи таблицы
Код: vbnet
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.
Public Function err_com(Optional DSPC, Optional DFPC, Optional CD_SMO, _
                        Optional polis, Optional FAM, Optional NAM, Optional SEX, _
                        Optional DRPC, Optional CD_MKB, Optional Q_recp, _
                        Optional vrach, Optional RSLT, Optional ISHOD, _
                        Optional NK, Optional ino, Optional napr, Optional dnapr) As String
ms = ""
On Error GoTo 1

If IsNull(DFPC) Then ms = ms & "нет даты выписки; "
If IsNull(DSPC) Then ms = ms & "нет даты поступления; "

If ino <> -1 Then
    If Nz(polis) = "" Then
       ms = ms & "не указан полис; "
    Else: If Not (Len(polis) = 16 Or Len(polis) = 9) Then ms = ms & "неправильная длина полиса; "
    End If
    If IsNull(CD_SMO) And Nz(polis) <> "" Then ms = ms & "не Саратовский полис; "
Else: ms = ms & "иногородний; "
End If
If Nz(FAM) = "" Then ms = ms & "не указана фамилия; "
If Nz(NAM) = "" Then ms = ms & "не указано имя; "
If SEX <> "м" And SEX <> "ж" Then ms = ms & "не указан пол; "
If IsNull(DRPC) Then ms = ms & "не указана дата рождения; "
If Nz(CD_MKB) = "" Then ms = ms & "не указан диагноз; "
If Q_recp = 0 Then ms = ms & "неверно кол-во посещений; "
If Nz(vrach) = "" Then ms = ms & "не указан врач; "
If Nz(RSLT) = "" Then ms = ms & "не указан результат; "
If Nz(ISHOD) = "" Then ms = ms & "не указан исход; "
If Nz(NK) = "" Then ms = ms & "не указан №карты; "
If RSLT = 305 And Nz(napr) = "" Then ms = ms & "для результата 305 должен быть указано отделение направления; "
If RSLT = 305 And IsNull(dnapr) Then ms = ms & "для результата 305 должна быть указана дата направления; "
If RSLT <> 305 And (Nz(napr) <> "" Or Not IsNull(dnapr)) Then ms = ms & "для указаных данных по госпитализации результат должен быть 305; "
'If rslt = 304 Then ms = ms & "результат 304 - лечение продолжено; "
If Not IsNull(DSPC) And Not IsNull(DFPC) Then If DCount("полис", "пересеч", "полис='" & polis & "' and timport.dspc=datevalue('" & DSPC & "') and timport.dfpc=datevalue('" & DFPC & "')") > 0 Then ms = ms & "пересечение периодов; "
If ms <> "" Then
   err_com = Left(ms, Len(ms) - 2)
Else: err_com = ""
End If
Exit Function
1: If Err.Number = 2424 Then
      Exit Function
   Else: MsgBox Err.Description, vbCritical
   End If
'MsgBox err_com
End Function
...
Рейтинг: 0 / 0
13.07.2016, 13:53
    #39273074
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы при связывании таблиц через VFP Driver
zenana,

А что это за дичь, простите)))
Код: sql
1.
WHERE (((IIf([gapu].[dspc]<=[timport].[dfpc] And [gapu].[dfpc]>=[timport].[dspc],True,False))=True) AND ...

?
Может быть, так
Код: sql
1.
WHERE ([gapu].[dspc]<=[timport].[dfpc] And [gapu].[dfpc]>=[timport].[dspc]) AND ...

?
...
Рейтинг: 0 / 0
13.07.2016, 14:11
    #39273099
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы при связывании таблиц через VFP Driver
Какой смысл вычислять в запросе Выражение1,
если это идентично одному из условий условию отбора WHERE со значением True,
то есть заведомо всегда будет только True?
Код: sql
1.
2.
3.
SELECT IIf([gapu].[dspc]<=[timport].[dfpc] And [gapu].[dfpc]>=[timport].[dspc],True,False) AS Выражение1, ......
FROM .....
WHERE (((IIf([gapu].[dspc]<=[timport].[dfpc] And [gapu].[dfpc]>=[timport].[dspc],True,False))=True) AND ....;
...
Рейтинг: 0 / 0
13.07.2016, 14:12
    #39273101
zenana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы при связывании таблиц через VFP Driver
__Michelle, это не принципиально ))
Просто сначала был создан запрос, который выводил все записи с отметкой есть пересечение или нет, а потом в процессе работы был использован этот старый запрос для вывода только тех, для которых есть пересечение.
Согласитесь в моем случае проблема не в этом ) А я соглашусь, что по-Вашему выглядит красивее ))
...
Рейтинг: 0 / 0
13.07.2016, 14:14
    #39273108
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы при связывании таблиц через VFP Driver
Кошмар...
...
Рейтинг: 0 / 0
13.07.2016, 14:22
    #39273119
zenana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы при связывании таблиц через VFP Driver
Анатолий ( Киев ), попробовала не выводить в запросе "пересеч" DFPC и DSPC для одной из таблиц и убрать timport. (оставила просто dfpc и dspc ) из Dcount. Не помогло. Сейчас вообще стал зависать на выполнении запроса "пересеч", причем иногда срабатывает, но чем больше выполняешь, тем реже срабатывает. Вчера на выполнении запроса "пересеч" ни разу не завис. Вместо datevalue пробовала format тоже не помогло. Какая-то ерунда со связанной таблицей. Жаль нет возможности откатить систему. Я полагаю, что-то с пользовательским DSN происходит или с VFP Driver
...
Рейтинг: 0 / 0
13.07.2016, 14:24
    #39273121
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы при связывании таблиц через VFP Driver
Уберите, хотя бы, помеченное красным
Код: vbnet
1.
DCount("полис", "пересеч", "полис='" & polis & "' and timport.dspc=.... and timport.dfpc=....
...
Рейтинг: 0 / 0
13.07.2016, 14:34
    #39273128
zenana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы при связывании таблиц через VFP Driver
__Michelle, запрос "пересеч" возвращает поля dfpc,dspc из таблиц timport и gapu, поэтому требуется указать к каким именно dfpc,dspc обращаться. Я убирала уже из запроса "пересеч" dfpc,dspc одной из таблиц и убирала выделенное Вами красным, это не помогло для решения моей проблемы
...
Рейтинг: 0 / 0
13.07.2016, 14:42
    #39273142
zenana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы при связывании таблиц через VFP Driver
У меня vfpodbc.dll версии 6.01.8629.1. Может имеет смысл попробывать заменить на более раннюю версию, например, имеется еще версия 6.0.8167.0
...
Рейтинг: 0 / 0
13.07.2016, 14:53
    #39273155
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы при связывании таблиц через VFP Driver
zenana,

Из самого запроса убирать детализирующие имена таблиц не надо, а вот из DCount надо.
...
Рейтинг: 0 / 0
13.07.2016, 14:58
    #39273165
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы при связывании таблиц через VFP Driver
Вот Ваш запрос в "облегченном" виде
Код: sql
1.
2.
3.
SELECT timport.полис, timport.DSPC, timport.DFPC, gapu.dspc, gapu.dfpc, gapu.cd_lpu
FROM timport INNER JOIN gapu ON timport.полис = gapu.sn_pol
WHERE ([gapu].[dspc]<=[timport].[dfpc]) And ([gapu].[dfpc]>=[timport].[dspc]) AND (gapu.cd_lpu=79);
...
Рейтинг: 0 / 0
13.07.2016, 16:26
    #39273251
zenana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы при связывании таблиц через VFP Driver
__Michelle, но ведь запрос возвращает два поля dfpc и два поля dspc (из разных таблиц), Dcount не понимает на какое поле ставить условие и выдает ошибку. Это тогда надо переименовывать поля, чтоб не было одинаковых имен. Но сейчас моя проблема не в этом
...
Рейтинг: 0 / 0
13.07.2016, 16:49
    #39273270
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы при связывании таблиц через VFP Driver
zenana,

Да, точно, одинаковые имена как-то ускользнули.
Я понимаю, что проблема в другом, но с этим помочь не могу, к сожалению.
...
Рейтинг: 0 / 0
13.07.2016, 18:16
    #39273343
f
f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы при связывании таблиц через VFP Driver
А таблицы-то какие? Почему вы такой драйвер используете?
...
Рейтинг: 0 / 0
14.07.2016, 10:21
    #39273566
zenana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы при связывании таблиц через VFP Driver
F, таблицы .dbf от программы, написанной на VFP.
...
Рейтинг: 0 / 0
14.07.2016, 10:26
    #39273570
zenana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы при связывании таблиц через VFP Driver
Пока справилась с проблемой заменой библиотеки vfpodbc.dll версии 6.01.8629.1 на более раннюю версию 6.0.8167.0 и избавлением от запроса "пересчет" (дописала в DCount побольше условий и вместо запроса взяла таблицу). Что именно помогло, нет времени разбираться (компьютер, на котором возникли проблемы, постоянно занят, работают в авральном режиме ). Говорю "пока справилась", поскольку проблема была плавающей, то работало, то нет, сейчас ПОКА (тьфу-тьфу-тьфу) стабильно работает.
...
Рейтинг: 0 / 0
14.07.2016, 12:24
    #39273674
f
f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы при связывании таблиц через VFP Driver
zenanaF, таблицы .dbf от программы, написанной на VFP.
Тогда надо использовать VFP Oledbprovider, поскольку VFP odbc-driver корректно работает только с таблицами dbf, созданными в версии не старше FoxPro 6.
...
Рейтинг: 0 / 0
15.07.2016, 09:03
    #39274294
zenana
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблемы при связывании таблиц через VFP Driver
F, да, я частенько пользуюсь OLE DB Provider for Visual FoxPro, но только когда удобно работать с таблицей как рекордсетом. А когда нужна связанная таблица, которая участвует во многих запросах, мне удобнее использовать драйвер. Наверное не хватает знаний ))
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проблемы при связывании таблиц через VFP Driver / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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