| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Достать данные из 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(); }  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			LP.setDSN("dBASE Files"); //стандартный DSN
		
	 
А "Файлы DBase" вместо "dBASE Files" пробовал?  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			у меня заработало только после того, как в настройке 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."); }  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Создал специальный 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(); }  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Кажется, понял в чем дело. 
		
		
		
		
		
		
			
		
		
		
		
	Покажи картинку с настройками ODBC (DBF). Там директория указана?  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ничего, если через 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; }  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			C ODBC есть еще одни грабли, на которые мне приходилось наступать: 
		
		
		
		
		
		
		
	в одном цикле функции rs.getString(1) для одного поля можно вызывать только один раз так if(rs.getString(1) == "") str = rs.getString(1); приведет к ошибке а tmp = rs.getString(1); if(tmp == "") str = tmp; работает нормально.  
		 | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			2 Михаил Андреев  
		
		
		
			Картинка вот, но в итоге, я бы хотел сам выбирать файл. Ууупсссс.... Не понял как прикрепить картинку, ну в DBF (ODBC) указан каталог W:\BALANS PS. А отправка картинки как делается?  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В тексте вставь строчку FIG1 в квадратных скобках... (а как его простым текстом оставить?) 
		
		
		
		
		
		
		
	внизу укажи, какой файл надо вставлять в этот элемент  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			2  Vadik  
		
		
		
		
		
		
		
	А как получать значения полей DBF курсора?  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо mazzy за подсказку.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			while (!rs.eof()) 
		
		
		
		
		
		
		
	{ print "fetch"; print rs.fields().itemname("a1").value(); rs.moveNext(); }  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			2 Vadik  
		
		
		
		
		
		
		
	Спасибо! Кажется работает!!! А через ODBC у кого нибудь есть рабочий вариант? Вот если использовать базу Access, то работает, а с DBF не получается?  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Должно и с DBF работать
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Хочу еще раз поднять вопрос. 
		
		
		
		
		
		
		
	Через ADO так медленно, что нет слов... ПОМОГИТЕ через ODBC, дайте рабочий пример!!!  | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вот здесь я создал ODBC источник данных - Test, положил туда файл (rab.dbf). 
		
		
		
		
		
		
		
	PHP код: 
	
			
	 | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			2  Андре  
		
		
		
		
		
		
		
	А можно посмотреть настройки DSN? И можно ли пользоваться одним DSN для разных DBF файлов, лежащих в разных местах?  | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			А можно посмотреть настройки DSN?
		
	 
Панель управления->Администрирование->Источники данных ODBC->System DSN-> Add-> Microsoft DBase driver (*.dbf) -> Имя источника данных - устанавливаем Test-> Версия dBASE IV-> Выбор каталога -> Указываем каталог в котором лежат dbf-ки. Цитата: 
	
		
			И можно ли пользоваться одним DSN для разных DBF файлов, лежащих в разных местах?
		
	 
 .Можно пользоваться одним DSN для разных файлов в одной директории. Я так и сделал - свалил все dbf-ки в одну директорию, пользователь выбирал dbf-ку (но только из данного каталога), и динамически формировал строку запроса.  | 
| 
	
 | 
| 
			
			 | 
		#19 | 
| 
			
			 Lean Six Sigma 
		
			
	 | 
	
	
	
		
		
			
			
			еще вариант по поводу 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(); } }  | 
| 
	
 | 
| 
			
			 | 
		#20 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Сделал два варианта, один ADO, другой ODBC. 
		
		
		
		
		
		
		
	Из базы с 4500 записями через ODBC данные берутся за 10 сек, а через ADO за 1 мин 10 сек. По ходу возник вопрос, как из DBF взять поле типа N 10, в которм есть число 9999999999? А то Аксапта что то плохо работает с большим int.  | 
| 
	
 | 
| 
	
	 | 
	
		
			 
			Похожие темы
		 | 
	||||
| Тема | Ответов | |||
| Как обновить форму, если добавление через кнопку? | 5 | |||
| Бинарные данные в Axapta | 4 | |||
| Вытащить данные на форму | 25 | |||
| Можно ли редактировать форму, если на нее наложен addRange? | 10 | |||
| почти DBF | 3 | |||
		
  |