Получение данных из 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 - в этом случае ошибка при получении данных из любого поля. |
Эту ссылку смотрела? [url]http://forum.sources.ru/index.php?showtopic=85218&st=15&#entry2125080[/url] Там по-моему есть получение данных. |
Вот еще на инфостарте, например, есть обработка: [url]http://infostart.ru/public/61622/[/url] |
(1) эту еще не смотрела. Пытаюсь в море инфы найти нужную. (2) именно эту обработку я и скачала. Она и выдает ошибки. Наверное, писалась под определенные данные. Вот ты знаешь, как определить тип данных в поле? Пока нашла только описание типов и что получение числовых данных тоже вызывает проблему. Может быть в запросе как-то нужно это прописывать? Просто как внутри связаны эти таблицы я вообще не имею представления. Разрабов ее написавшие нет. Есть только выходные данные в виде проги ехе, файла бд и пользовательского интерфейса. |
Ну значит преобразуй числовой тип в текстовый в самом запросе: "select CAST(SSUM AS CHAR(15)) AS SSUM , CAST(RSUM AS CHAR(15)) AS RSUM from NACH"; |
А когда перебираешь записи нельзя сразу поставить условие : Если тип Числовой - перевести в текстовый. Это FB - не умеет? Просто в базе 20 таблиц. В каждой минимум 3 поля. Проанализировать каждую таблицу, для каждого поля прописать.... Там же не по 1-2 числовых, есть и больше. Сами идентификаторы - тоже числа. Уйма времени и кода. Что б попытаться найти нужные данные, мне нужно сделать вывод значений, хранящихся в них. А потом их проанализировать, сопоставив с визуальными данными отчетов и выводимой на экран информацией. Но на будущее я возьму эту формулу. Может очень пригодиться. Спасибо. |
5-Lisonia >Я вообще проблему не вижу. У меня почему-то всё читается, и числа и даты, и строки. Попробуй обращаться к полю не по имени, а по порядковому номеру: БазаДан.Fields(0).Value, БазаДан.Fields(1).Value... И вообще, для анализа БД юзай IBExpert (лежит [url=http://www.ibexpert.com/rus/ibe_sfx.exe]здесь[/url]) |
И по номеру обращалась и по имени - результат един. Спасибо, поюзаю )) |
7-Lisonia > Value = СокрЛП(БазаДан.Fields(имяПоля).Value); Так тоже ошибка? |
Пробуй явно задать имя поля в выборке: СтрокаПолей ="select SSUM as SSUM, RSUM as RSUM from NACH"; |
Табле = "'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) = Ошибка в выражении! |
10-Lisonia >Посмотри в IBExpert точный тип поля TSUM. А лучше, если есть возможность, выложи куда-нибудь БД и сбрось мне ссылку в личку. Чудеса, да и только! |
IBExpert - выдает ошибку. Сперва ругался на длл, после перезагрузки просто не открывает. |
12-Lisonia >Базу кидай куда-нибудь. По фотке лечить не умею. |
Спасибо, на какой файлообменник лучше залить? На мои привычные - не льет. или из дома позже попробую залить. Буду ждать ответа. Заранее спасибо за желание помочь! |
14-Lisonia >Да хоть на какие :) Если торрентом пользуешься, то можешь создать персональный торрент и выслать мне торрент файл, я на прямую у тебя скачаю. Как это сделать - инструкцию легко найдешь в яндексе. Если БД меньше гига, можешь на [url]http://webfiles.ru/[/url] залить. |
14-Lisonia >Я тебе в личку сообщение отправил, проверь. |
[quote=Lisonia;36842236]Значен = БазаДан.Fields(имяПоля).Value;[/quote] хмм.. может ошибаюсь, но Значен = БазаДан.Fields.Item(имяПоля).Value; или Значен = БазаДан.Fields.Item(НомерПоля).Value; |
17-Блондинка в шок >Не, не, именно .Fields(n).Value Итема там не было :) |
Кстати, на одном форуме было написано именно Item. Я пробовала это в обработке - выдавал тоже самое значение, что и без оного - по крайней мере, на моем файле. |
ну не знаю, я с 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] |
А есть букварь на русском языке?))) |
20-Блондинка в шок >Тут понимаешь в чем фишка: RecordSet.Fields(0).Value = RecordSet.Fields.Item(0) |
Текущее время: 12:13. Часовой пояс GMT +3. |