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,377 / 1436 (54) ++++++++
Регистрация: 18.11.2002
Адрес: гражданин Москвы
Цитата:
LP.setDSN("dBASE Files"); //стандартный DSN
уверен?

А "Файлы DBase" вместо "dBASE Files" пробовал?
Старый 31.01.2003, 13:09   #3  
Михаил Андреев is offline
Михаил Андреев
Участник
Компания АМАНД
Лучший по профессии 2009
 
1,258 / 228 (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.");
}
__________________
Михаил Андреев, 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,258 / 228 (10) ++++++
Регистрация: 09.11.2001
Адрес: Химки, Московская область
Кажется, понял в чем дело.
Покажи картинку с настройками ODBC (DBF).
Там директория указана?
__________________
Михаил Андреев, www.amand.ru
Старый 31.01.2003, 15:28   #6  
Vadik is offline
Vadik
Модератор
Аватар для Vadik
Лучший по профессии 2017
Лучший по профессии 2015
 
3,377 / 1436 (54) ++++++++
Регистрация: 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 Кб, 702 просмотров)
Старый 31.01.2003, 16:51   #9  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,840 / 3738 (182) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
В тексте вставь строчку 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,377 / 1436 (54) ++++++++
Регистрация: 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,374 / 451 (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,374 / 451 (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, время: 11:48.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.