AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.01.2003, 12:29   #1  
edd is offline
edd
Участник
 
81 / 10 (1) +
Регистрация: 20.01.2003
Достать данные из DBF в форму
Не могу вытащить данные из dbf в форму, помогите разобраться.

Сообщение (14:28:28)
Невозможно выбрать запись в таблице '' ('')
База данных SQL обнаружила ошибку.
Описание ошибки SQL: [Microsoft][ODBC dBase Driver] Объект 'OB23' не найден ядром базы данных Microsoft Jet. Проверьте существование объекта и правильность имени и пути.
SQL запрос: select * from OB23

Где ошибка?
Как правильно сделать?


void clicked()
{
LoginProperty LP;
Connection con;
Statement stmt;
Resultset rs;
str filename;
FileNameFilter filter;
;
super();
filter = ['DBF files','*.dbf'];
filename = Winapi::getOpenFileName(element.hWnd(),filter,'','', '','');
LP = new LoginProperty();
LP.setDSN("dBASE Files"); //стандартный DSN
LP.setDatabase(filename);
Con = new OdbcConnection(LP);
stmt = con.createStatement();
rs = stmt.executeQuery('select * from OB23'); // именно с таким именем файл я выбирал в диалоге

while (rs.next()) // ОШИБКА ВОЗНИКАЕТ ТУТ
{
print rs.getstring(1);
}

rs.close();
element.close();
}
Старый 31.01.2003, 13:02   #2  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
LP.setDSN("dBASE Files"); //стандартный DSN
уверен?

А "Файлы DBase" вместо "dBASE Files" пробовал?
Старый 31.01.2003, 13:09   #3  
Михаил Андреев is offline
Михаил Андреев
Участник
Компания АМАНД
Лучший по профессии 2009
 
1,295 / 239 (10) ++++++
Регистрация: 09.11.2001
Адрес: Химки, Московская область
у меня заработало только после того, как в настройке ODBC я указал напрямую папку, где лежат файл и сказал об этом Аксапте, да и драйвер у меня указан другой:

static void Job1(Args _args)
{
LoginProperty LP;
OdbcConnection C;
Statement S;
ResultSet R;


LP = new LoginProperty();
LP.setDSN("DBASE");
LP.setDatabase("D:\\");
LP.setOther("D:\\");




C = new OdbcConnection(LP);

if (C)
{
S = C.createStatement();
R = S.executeQuery("SELECT * FROM [TEST]");

while (R.next()) print R.getString(1);
}
else error("Failed to log on to the database.");
}
__________________
Михаил Андреев
https://www.amand.ru
Старый 31.01.2003, 13:47   #4  
edd is offline
edd
Участник
 
81 / 10 (1) +
Регистрация: 20.01.2003
Создал специальный DSN, в нем указал путь w:\balans, переделал код, результат тот же.
Проверил в Excel новый DSN, он работает, т.е. выбираю Данные\Внешние данные\Создать запрос, далее выбираю DBF (так назвал DSN) и вижу список таблиц для запроса.

Дайте рабочий кусок кода, пожалуйста.

void clicked()
{
LoginProperty LP;
Connection con;
Statement stmt;
Resultset rs;
str filename;
FileNameFilter filter;
;
super();
LP = new LoginProperty();
LP.setDSN("DBF");
LP.setDatabase("w:\\balans\\");
LP.setOther("w:\\balans\\");

Con = new OdbcConnection(LP);
if (Con)
{
stmt = con.createStatement();
rs = stmt.executeQuery('select * from OB23_1');

while (rs.next())
{
print rs.getstring(1);
}

rs.close();
}
element.close();
}
Старый 31.01.2003, 14:04   #5  
Михаил Андреев is offline
Михаил Андреев
Участник
Компания АМАНД
Лучший по профессии 2009
 
1,295 / 239 (10) ++++++
Регистрация: 09.11.2001
Адрес: Химки, Московская область
Кажется, понял в чем дело.
Покажи картинку с настройками ODBC (DBF).
Там директория указана?
__________________
Михаил Андреев
https://www.amand.ru
Старый 31.01.2003, 15:28   #6  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Ничего, если через ado?

static void Job99(Args _args)
{
LoginProperty LP;
OdbcConnection C;
Statement S;
ResultSet R;

CCADOConnection cn = new CCADOConnection();
CCADOCommand command = new CCADOCommand();
CCADORecordset rs = new CCADORecordset();

cn = new CCADOConnection();
cn.open("Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:\\;");

command.activeConnection(cn);
command.commandText("select * from mydbf.dbf");
rs = command.execute();

while (!rs.eof())
{
print "fetch";
rs.moveNext();
}

pause;
}
Старый 31.01.2003, 16:18   #7  
Vladislav Yushakov is offline
Vladislav Yushakov
Участник
 
47 / 10 (1) +
Регистрация: 10.01.2003
C ODBC есть еще одни грабли, на которые мне приходилось наступать:
в одном цикле функции
rs.getString(1) для одного поля можно вызывать только один раз так

if(rs.getString(1) == "")
str = rs.getString(1);

приведет к ошибке

а
tmp = rs.getString(1);
if(tmp == "")
str = tmp;

работает нормально.
Старый 31.01.2003, 16:29   #8  
edd is offline
edd
Участник
 
81 / 10 (1) +
Регистрация: 20.01.2003
2 Михаил Андреев

Картинка вот, но в итоге, я бы хотел сам выбирать файл.

Ууупсссс....

Не понял как прикрепить картинку, ну в DBF (ODBC) указан каталог W:\BALANS

PS. А отправка картинки как делается?

Вложения
Тип файла: img7839-1 (26.9 Кб, 1116 просмотров)
Старый 31.01.2003, 16:51   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
В тексте вставь строчку FIG1 в квадратных скобках... (а как его простым текстом оставить?)

внизу укажи, какой файл надо вставлять в этот элемент
Старый 31.01.2003, 16:53   #10  
edd is offline
edd
Участник
 
81 / 10 (1) +
Регистрация: 20.01.2003
2 Vadik

А как получать значения полей DBF курсора?
Старый 31.01.2003, 16:56   #11  
edd is offline
edd
Участник
 
81 / 10 (1) +
Регистрация: 20.01.2003
Спасибо mazzy за подсказку.
Старый 31.01.2003, 17:18   #12  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,631 / 1849 (69) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
while (!rs.eof())
{
print "fetch";
print rs.fields().itemname("a1").value();
rs.moveNext();

}
Старый 31.01.2003, 17:26   #13  
edd is offline
edd
Участник
 
81 / 10 (1) +
Регистрация: 20.01.2003
2 Vadik

Спасибо!

Кажется работает!!!

А через ODBC у кого нибудь есть рабочий вариант?
Вот если использовать базу Access, то работает, а с DBF не получается?
Старый 31.01.2003, 17:30   #14  
Vladislav Yushakov is offline
Vladislav Yushakov
Участник
 
47 / 10 (1) +
Регистрация: 10.01.2003
Должно и с DBF работать
Старый 03.02.2003, 11:58   #15  
edd is offline
edd
Участник
 
81 / 10 (1) +
Регистрация: 20.01.2003
Хочу еще раз поднять вопрос.

Через ADO так медленно, что нет слов...

ПОМОГИТЕ через ODBC, дайте рабочий пример!!!
Старый 03.02.2003, 12:04   #16  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Вот здесь я создал ODBC источник данных - Test, положил туда файл (rab.dbf).

PHP код:
OdbcConnection connection;
    
LoginProperty    loginProperty = new LoginProperty();
    
Statement         statement;
    
ResultSet           resultSet;
    
str                    statementTxt "select * from rab.dbf";
    
str                    resultLevelresultName;
    
int                    resultFieldInt;

    
loginProperty.setDSN("Test");
    
connection = new OdbcConnection(loginProperty);
    
statement connection.createStatement();
    
resultSet statement.executeQuery(statementTxt);

    while (
resultSet.next())
    {
         
resultLevel resultSet.getString(1);
         if (
StrLen(resultLevel) == 3)
         {
           
resultName resultSet.getString(5);
         }
    } 
Старый 03.02.2003, 12:32   #17  
edd is offline
edd
Участник
 
81 / 10 (1) +
Регистрация: 20.01.2003
2 Андре

А можно посмотреть настройки DSN?
И можно ли пользоваться одним DSN для разных DBF файлов, лежащих в разных местах?
Старый 03.02.2003, 12:48   #18  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
А можно посмотреть настройки DSN?
Может не совсем понял вопрос, но я делал так:

Панель управления->Администрирование->Источники данных ODBC->System DSN-> Add-> Microsoft DBase driver (*.dbf) -> Имя источника данных - устанавливаем Test-> Версия dBASE IV-> Выбор каталога -> Указываем каталог в котором лежат dbf-ки.

Цитата:
И можно ли пользоваться одним DSN для разных DBF файлов, лежащих в разных местах?
Нет - и это плохо. Но как сделать по другому я не знаю. Хоть dsn через API создавай и уничтожай вручную .
Можно пользоваться одним DSN для разных файлов в одной директории. Я так и сделал - свалил все dbf-ки в одну директорию, пользователь выбирал dbf-ку (но только из данного каталога), и динамически формировал строку запроса.
Старый 03.02.2003, 15:55   #19  
Ned is offline
Ned
Lean Six Sigma
 
680 / 99 (5) ++++
Регистрация: 29.12.2002
Адрес: самолёт
еще вариант по поводу ADO
Более короткий вариант АДО:

void clicked()
{
CCADOConnection cn = new CCADOConnection();
CCADORecordset rs = new CCADORecordset();

cn.open("Driver=Microsoft dBASE Driver (*.dbf);Dbq=c:\\;");
rs.open("select * from ZN1", cn);

while (!rs.eof())
{
print rs.fields().itemidx(1).value()+":"+ rs.fields().itemname("name").value();
rs.moveNext();
}
}
Старый 03.02.2003, 16:53   #20  
edd is offline
edd
Участник
 
81 / 10 (1) +
Регистрация: 20.01.2003
Сделал два варианта, один ADO, другой ODBC.

Из базы с 4500 записями через ODBC данные берутся за 10 сек, а через ADO за 1 мин 10 сек.

По ходу возник вопрос, как из DBF взять поле типа N 10, в которм есть число 9999999999?
А то Аксапта что то плохо работает с большим int.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как обновить форму, если добавление через кнопку? Arahnid DAX: Программирование 5 21.05.2007 11:18
Бинарные данные в Axapta Lucky13 DAX: Программирование 4 07.04.2007 11:51
Вытащить данные на форму Protey DAX: Программирование 25 19.03.2007 16:28
Можно ли редактировать форму, если на нее наложен addRange? Hans DAX: Программирование 10 22.05.2006 16:35
почти DBF Gorlum DAX: Программирование 3 17.03.2006 12:52

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 18:34.