Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   Получение данных из FireBird в 1С77 (http://forums.kuban.ru/f1040/poluchenie_dannyh_iz_firebird_v_1s77-6189404.html)

Lisonia 17.10.2014 11:09

Получение данных из FireBird в 1С77
 
Как получить значение поля таблицы FB, зная наименование поля? Выдается ошибка с цифровых полей.

Запрос такой :
СтрокаПолей ="select SSUM,RSUM from NACH";

ЗапДан = СоздатьОбъект("ADODB.Command");
ЗапДан.ActiveConnection = ГДБ;
ЗапДан.CommandText = СокрЛП(СтрокаПолей);
БазаДан = СоздатьОбъект("ADODB.RecordSet");
БазаДан = ЗапДан.Execute(); //Выполнить

БазаДан.MoveFirst();

Пока БазаДан.EOF() = 0 Цикл

имяПоля="SSUM";
Значен = БазаДан.Fields(имяПоля).Value;

БазаДан.MoveNext();
КонецЦикла;

Выдает ошибку :
БазаДан.Fields(имяПоля).Value = Ошибка в выражении!

Пробовала и Text и Value2 - в этом случае ошибка при получении данных из любого поля.

Korpas 17.10.2014 11:38

Эту ссылку смотрела?
[url]http://forum.sources.ru/index.php?showtopic=85218&st=15&#entry2125080[/url]
Там по-моему есть получение данных.

Korpas 17.10.2014 11:39

Вот еще на инфостарте, например, есть обработка:
[url]http://infostart.ru/public/61622/[/url]

Lisonia 17.10.2014 11:56

(1) эту еще не смотрела. Пытаюсь в море инфы найти нужную.
(2) именно эту обработку я и скачала. Она и выдает ошибки. Наверное, писалась под определенные данные.

Вот ты знаешь, как определить тип данных в поле? Пока нашла только описание типов и что получение числовых данных тоже вызывает проблему. Может быть в запросе как-то нужно это прописывать?

Просто как внутри связаны эти таблицы я вообще не имею представления. Разрабов ее написавшие нет. Есть только выходные данные в виде проги ехе, файла бд и пользовательского интерфейса.

Billi 17.10.2014 12:04

Ну значит преобразуй числовой тип в текстовый в самом запросе:
"select
CAST(SSUM AS CHAR(15)) AS SSUM
, CAST(RSUM AS CHAR(15)) AS RSUM
from NACH";

Lisonia 17.10.2014 12:38

А когда перебираешь записи нельзя сразу поставить условие :
Если тип Числовой - перевести в текстовый. Это FB - не умеет?

Просто в базе 20 таблиц. В каждой минимум 3 поля. Проанализировать каждую таблицу, для каждого поля прописать.... Там же не по 1-2 числовых, есть и больше. Сами идентификаторы - тоже числа. Уйма времени и кода.

Что б попытаться найти нужные данные, мне нужно сделать вывод значений, хранящихся в них. А потом их проанализировать, сопоставив с визуальными данными отчетов и выводимой на экран информацией.

Но на будущее я возьму эту формулу. Может очень пригодиться. Спасибо.

Billi 17.10.2014 14:29

5-Lisonia >Я вообще проблему не вижу. У меня почему-то всё читается, и числа и даты, и строки.
Попробуй обращаться к полю не по имени, а по порядковому номеру: БазаДан.Fields(0).Value, БазаДан.Fields(1).Value...
И вообще, для анализа БД юзай IBExpert (лежит [url=http://www.ibexpert.com/rus/ibe_sfx.exe]здесь[/url])

Lisonia 17.10.2014 14:44

И по номеру обращалась и по имени - результат един.
Спасибо, поюзаю ))

Billi 17.10.2014 14:49

7-Lisonia >
Value = СокрЛП(БазаДан.Fields(имяПоля).Value);
Так тоже ошибка?

Billi 17.10.2014 14:50

Пробуй явно задать имя поля в выборке:
СтрокаПолей ="select SSUM as SSUM, RSUM as RSUM from NACH";

Lisonia 17.10.2014 15:54

Табле = "'NACH'"
СтрокаПолей = "select ID as ID,FLS as FLS,DT as DT,IDUSL as IDUSL,TSUM as TSUM,RSUM as RSUM,SSUM as SSUM from NACH"

Значен = "TSUM"
БазаДан.Fields(Значен).Value = Ошибка в выражении!
FloatToStr(БазаДан.Fields(Значен).Value) = Ошибка в выражении!
БазаДан.Fields(Значен).Text = Ошибка в выражении!
СокрЛП(БазаДан.Fields(Значен).Value) = Ошибка в выражении!

Billi 17.10.2014 16:02

10-Lisonia >Посмотри в IBExpert точный тип поля TSUM.
А лучше, если есть возможность, выложи куда-нибудь БД и сбрось мне ссылку в личку.
Чудеса, да и только!

Lisonia 17.10.2014 16:24

IBExpert - выдает ошибку. Сперва ругался на длл, после перезагрузки просто не открывает.

Billi 17.10.2014 16:30

12-Lisonia >Базу кидай куда-нибудь.
По фотке лечить не умею.

Lisonia 17.10.2014 16:38

Спасибо, на какой файлообменник лучше залить? На мои привычные - не льет. или из дома позже попробую залить. Буду ждать ответа.
Заранее спасибо за желание помочь!

Billi 17.10.2014 16:42

14-Lisonia >Да хоть на какие :)
Если торрентом пользуешься, то можешь создать персональный торрент и выслать мне торрент файл, я на прямую у тебя скачаю. Как это сделать - инструкцию легко найдешь в яндексе.
Если БД меньше гига, можешь на [url]http://webfiles.ru/[/url] залить.

Billi 17.10.2014 16:46

14-Lisonia >Я тебе в личку сообщение отправил, проверь.

Блондинка в шок 17.10.2014 18:24

[quote=Lisonia;36842236]Значен = БазаДан.Fields(имяПоля).Value;[/quote]

хмм..
может ошибаюсь, но
Значен = БазаДан.Fields.Item(имяПоля).Value;
или
Значен = БазаДан.Fields.Item(НомерПоля).Value;

Billi 17.10.2014 18:30

17-Блондинка в шок >Не, не, именно .Fields(n).Value
Итема там не было :)

Lisonia 17.10.2014 18:58

Кстати, на одном форуме было написано именно Item. Я пробовала это в обработке - выдавал тоже самое значение, что и без оного - по крайней мере, на моем файле.

Блондинка в шок 17.10.2014 19:22

ну не знаю, я с ADO всегда по букварю делала. А в букваре все примеры с item
[url]http://www.w3schools.com/asp/ado_ref_recordset.asp[/url]

хотя мелкомягкие и говорят, что это одно и то же:
[url]http://msdn.microsoft.com/ru-ru/library/windows/desktop/ms676135(v=vs.85).aspx[/url]

Lisonia 17.10.2014 19:43

А есть букварь на русском языке?)))

Billi 18.10.2014 00:02

20-Блондинка в шок >Тут понимаешь в чем фишка:
RecordSet.Fields(0).Value = RecordSet.Fields.Item(0)


Текущее время: 12:13. Часовой пояс GMT +3.