powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Косяк при выборке из двух DBF-файлов
25 сообщений из 27, страница 1 из 2
Косяк при выборке из двух DBF-файлов
    #36654630
Gaiver23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бьюсь уже не один день, есть такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim strConn As String
strConn = "DBQ=" & App.Path & ";Driver={Microsoft dBase Driver (*.dbf)}; FIL=dBase4.0"
conn.ConnectionString = strConn
conn.Open conn.ConnectionString
Dim sSQL As String
sSQL = "SELECT namefile FROM FTPNEW WHERE namefile Not In (Select namefile FROM FTPOLD)"
rs.Open sSQL, conn, adOpenStatic, adLockOptimistic
Вылетает сообщение об ошибке: [Microsoft][Драйвер ODBC dBase] Слишком мало параметров. Требуется 1.

Аналогичный код в MS ACCESS работает без проблем:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
Dim strConn As String
Dim strPath As String
strPath = "C:\MYPROG"
strConn = "DBQ=" & strPath & ";Driver={Microsoft dBase Driver (*.dbf)}; FIL=dBase4.0"
conn.ConnectionString = strConn
conn.Open conn.ConnectionString
Dim sSQL As String
sSQL = "SELECT namefile FROM FTPNEW WHERE namefile Not In (Select namefile FROM FTPOLD)"
rs.Open sSQL, conn, adOpenStatic, adLockOptimistic
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36654645
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gaiver23,
Повторный постинг запрещен правилами.
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36654649
Gaiver23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProGaiver23,
Повторный постинг запрещен правилами.

Это не повторный постинг. Теперь точно известно, что причина ошибки вообще не понятно, т.к. используется один и тот же ODBC драйвер, но получается разный результат.
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36654671
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приложите таблицы FTPNEW и FTPOLD
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36654682
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gaiver23точно известно, что причина ошибки вообще не понятно

ИМХО, это и раньше было известно

Может попробовать в форуме dBase? ADO - оно ж и в Африке ADO
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36654685
Gaiver23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SashaMПриложите таблицы FTPNEW и FTPOLD

Таблицы создаются программно, следующим образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public Function CreateDBFTemplate(sDBFName As String) As Boolean
Dim sPath As String

'===== Путь к DBF
sPath = App.Path & "\"

If Dir(sPath & "\" & sDBFName & ".dbf") = "" Then
    Dim conn As New ADODB.Connection
    conn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPath & ";User ID=Admin;Password=;Extended Properties=dBase IV")
    '===== Создаем DBF
    conn.Execute "create table " & sDBFName & "(namefile char(128))"
    conn.Close

    Set conn = Nothing
    CreateDBFTemplate = True
Else
    CreateDBFTemplate = False
End If
End Function
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36654688
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMПриложите таблицы FTPNEW и FTPOLD
+1
или хотя бы скрипты их создания и заполнения, чтобы воспроизвести ситууацию
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36654689
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gaiver23Бьюсь уже не один день, есть такой код:
Код: plaintext
1.
strConn = "DBQ=" & App.Path & ";Driver={Microsoft dBase Driver (*.dbf)}; FIL=dBase4.0"
Вылетает сообщение об ошибке: [Microsoft][Драйвер ODBC dBase] Слишком мало параметров. Требуется 1.

Аналогичный код в MS ACCESS работает без проблем:

Код: plaintext
1.
strPath = "C:\MYPROG"
strConn = "DBQ=" & strPath & ";Driver={Microsoft dBase Driver (*.dbf)}; FIL=dBase4.0"

По пути App.Path лежат таблицы?
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36654694
Gaiver23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SashaMGaiver23Бьюсь уже не один день, есть такой код:
Код: plaintext
1.
strConn = "DBQ=" & App.Path & ";Driver={Microsoft dBase Driver (*.dbf)}; FIL=dBase4.0"
Вылетает сообщение об ошибке: [Microsoft][Драйвер ODBC dBase] Слишком мало параметров. Требуется 1.

Аналогичный код в MS ACCESS работает без проблем:

Код: plaintext
1.
strPath = "C:\MYPROG"
strConn = "DBQ=" & strPath & ";Driver={Microsoft dBase Driver (*.dbf)}; FIL=dBase4.0"

По пути App.Path лежат таблицы?

Само собой. Программа работает постоянно с этими таблицами, спотыкается только при попытке сделать выборку сразу из двух таблиц.
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36654714
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил в Excel всё работает. Прикрепите заполненные таблицы, не прячьте :)
Код: 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.
Sub Create()
  CreateDBFTemplate "FTPOLD"
  CreateDBFTemplate "FTPNEW"

  Dim conn As ADODB.Connection
  Set conn = New ADODB.Connection
  Dim rs As ADODB.Recordset
  Set rs = New ADODB.Recordset
  Dim strConn As String
  Dim strPath As String
  strPath = "C:\MYPROG\"
  strConn = "DBQ=" & strPath & ";Driver={Microsoft dBase Driver (*.dbf)}; FIL=dBase4.0"
  conn.ConnectionString = strConn
  conn.Open conn.ConnectionString
  Dim sSQL As String
  sSQL = "SELECT namefile FROM FTPNEW WHERE namefile Not In (Select namefile FROM FTPOLD)"
  rs.Open sSQL, conn, adOpenStatic, adLockOptimistic
End Sub

Public Function CreateDBFTemplate(sDBFName As String) As Boolean
Dim sPath As String

'===== Путь к DBF
sPath = "C:\MYPROG\"

If Dir(sPath & "\" & sDBFName & ".dbf") = "" Then
    Dim conn As New ADODB.Connection
    conn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPath & ";User ID=Admin;Password=;Extended Properties=dBase IV")
    '===== Создаем DBF
    conn.Execute "create table " & sDBFName & "(namefile char(128))"
    conn.Close

    Set conn = Nothing
    CreateDBFTemplate = True
Else
    CreateDBFTemplate = False
End If
End Function
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36654785
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вообще не вижу смысла использовать несколько ODBC драйверов и постоянно открывать и закрывать коннекты. Попробуйте так:
Код: 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.
Dim conn As ADODB.Connection

Sub Create()
  Dim strPath As String
  strPath = "C:\MYPROG\"
  Set conn = New ADODB.Connection
  conn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strPath & ";User ID=Admin;Password=;Extended Properties=dBase IV")
 
  CreateDBFTemplate "FTPOLD"
  CreateDBFTemplate "FTPNEW"

  sSQL$ = "SELECT namefile FROM FTPNEW WHERE namefile Not In (Select namefile FROM FTPOLD)"
  Dim rs As New ADODB.Recordset
  rs.Open sSQL, conn, adOpenStatic, adLockOptimistic
  rs.Close
  Set rs = Nothing
  conn.Close
  Set conn = Nothing
End Sub

Public Function CreateDBFTemplate(sDBFName As String, Optional sPath As String = "C:\MYPROG\") As Boolean
  If Dir(sPath & "\" & sDBFName & ".dbf") = "" Then
    conn.Execute "create table " & sDBFName & "(namefile char(128))"
    CreateDBFTemplate = True
  End If
End Function
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36654824
Gaiver23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SashaM, Понятно, что в Excel все работает, так как тот же VBA, а я уже говорил о том, что в MS ACCESS все работает. Смысл выкладывать таблицы, если ошибка происходит независимо от того, пустые таблицы или нет. Здесь ошибка в открытии рекордсета, а не в данных.
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36654997
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня ошибка не воспроизводится :(
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36655044
Gaiver23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я понял из-за чего может происходить данная ошибка. Дело в том, что если делать выборку из dbf-файла запросом вида "SELECT [имя_поля] FROM [имя_таблицы]", то запрос возвращает ту самую ошибку, а если же отобрать записи запросом типа: "SELECT * FROM [имя_таблицы]" - тогда все прекрасно работает, т.е. ошибка из-за того, что в запросе указывается имя поля. Теперь вопрос следующий: У меня обязательно должно присутствовать в выборке имя_поля, так как запрос на Not In, как бороться дальше????
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36655057
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такое ощущение, что имя поля воспринимается как параметр, который надо задать.
Когда я предложил изменить запрос и имя поля встретилось там больше раз, вы сказали, что ошибка изменилась - стало требовать больше параметров.

А попробуйте квалифицировать имя поля полностью - с именем таблицы.
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36655080
Gaiver23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProТакое ощущение, что имя поля воспринимается как параметр, который надо задать.
Когда я предложил изменить запрос и имя поля встретилось там больше раз, вы сказали, что ошибка изменилась - стало требовать больше параметров.

А попробуйте квалифицировать имя поля полностью - с именем таблицы.

Да вы верно заметили, это я про параметры. Имя поля уже пробывал прописывать полностью, результат был тот же. Сейчас вот для того, чтобы убедится в реальном косяке попробую на другом компьютере проверить.
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36655085
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однако, вы говорили, что
SELECT [namefile] FROM FTPNEW у вас работает!!!
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36655095
Gaiver23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Срочно в номер!
Скомпилированная версия работает, как часы, никаких сообщений об ошибках не вылетает и в лог не пишется!!!!! Буду перезагружать свой комп.
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36655381
Gaiver23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Через DAO такая же ошибка, и опять же в MS Access все работает, как надо. Скомпилированная версия работает на любом компьютере без ошибок, а не скомпилированная вываливает ошибку на любом компьютере. Интересно, как же тогда работать с dbf-файлами из Visual Basic если мне нужно в запросе обязательно указывать имена полей????
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36655399
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что у тебя показывает в IDE App.Path?
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36655529
Gaiver23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SashaMЧто у тебя показывает в IDE App.Path?

Да все нормально он показывает, я уже не один раз говорил, что проблема в том, что нельзя задавать имена полей в SELECTE.
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36655545
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если только имена совпадают с командами или ключевыми словами.
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36655558
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gaiver23,

попробуй переустановить сам АДО.
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36657799
Фотография aduka05adm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос,
а как в запросе указать числовое поле?
пробую так получается
Код: plaintext
Conn.Execute "create table " & sDBFName & "(kod char(20),name char(100),sklad integer)"
но мне хотелось длину установить, а так выдает ошибку
Код: plaintext
Conn.Execute "create table " & sDBFName & "(kod char(20),name char(100),sklad integer(6,0))"
...
Рейтинг: 0 / 0
Косяк при выборке из двух DBF-файлов
    #36657804
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aduka05adm,

почитай сначала описание типов данных в dBase
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Косяк при выборке из двух DBF-файлов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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