Lotus и DBF

Тема в разделе "Lotus - Программирование", создана пользователем at-soft-utility, 6 окт 2004.

Статус темы:
Закрыта.
  1. Don

    Don Гость

    Для решения такого и подобных вопросов использую программы написанные на Дельфи. Основа - набор компонентов DNotes. Гибкость получается абсолюной. Компоненты позволяют читать и писать в лотусные базы, а всё остальное решается на Delphi
     
  2. Vagor.ini

    Vagor.ini Гость

    Don
    Где сие компоненты можно заюзать, поподробне пожалуйста...
     
  3. Guest

    Guest Гость

    Была такая фирма VSoft Technologies Pty Ltd из Австралии. Она их и разработала. Там мы их и покупали. Правда, поддержка прекращена. Автор Vincent Parett считает, что правильнее использовать COM - Lotus предоставляет его бесплатно. А я давно и успешно пишу всякие утилиты и пр. Есть в Инете эти компоненты с лекарством. Этот вариант могу выслать.
    Похожие компоненты писал в Росии Колчин. Они бесплатные.
     
  4. Afrael

    Afrael Гость

  5. Azazel

    Azazel Гость

    Здравствуйте.
    У меня возникла проблема. Требуется считывать определенную инфу из приходящих dbf файлов и заносить ее в другую базу. Так вот - как можно из Лотуса открыть dbf файл и выполнить в нем какие то запросы. Я сделал это прописав данный файл в администраторе источников данных ODBC. таким образом я его свободно открываю и выполняю нужные мне действия. Но - файлы будут приходить каждый раз разные ( с одинаковыми полями естественно ) - неужели каждый раз их надо прописывать в администраторе? Нет ли какого либо другого способа работы с dbf файлами?
    Заранее спасибо.
     
  6. SkyRanger

    SkyRanger Active Member

    Регистрация:
    17 мар 2007
    Сообщения:
    44
    Симпатии:
    0
    Как из dbf файла импортировать данные. Т.е. мне нужно создать документ для каждой строки dbf файла и заполнить поля документа данными из столбцов dbf

    Киньте линков плииз, а то найти ничего приличного или доступного не могу :D
     
  7. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Страдалец :D
    В общем, занимался такой темой, делал через ODBC (у меня импортировалась целая БД из нескольких таблиц).
    Сначала для dbf-ок создается ODBC-источник данных.
    Затем, пишется примерно следующий
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='ls'>Dim con As New ODBCConnection 'Соединение с источником данных
    Dim query As New ODBCQuery 'Запрос к источнику данных
    Dim resultSet As New ODBCResultSet 'Набор данных, получаемый в результате выполнения запроса
    Dim db As NotesDatabase
    Dim doc As NotesDocument

    Set db = ... ' берешь свою БД

    con.ConnectTo "Имя твоего источника данных" 'подключаемся

    query.Connection = con
    query.SQL = "SELECT fieldA, fieldB FROM TheTable"
    resultSet.Query = query

    resultSet.Execute 'выполняем запрос

    'Если что-то вернулось...
    If resultSet.IsResultSetAvailable Then
    'перебираем поля набора данных
    Do
    resultSet.NextRow
    Set doc = New NotesDocument(db)
    'извлекаем значение поля набора данных для текущей строки и кладем в
    'одноименное поле документа
    doc.ReplaceItemValue "FieldA", resultSet.GetValue("fieldA")
    doc.ReplaceItemValue "FieldB", resultSet.GetValue("fieldB")
    doc.Save True, False
    Loop Until resultSet.IsEndOfData
    resultSet.Close
    End If[/CODE]
    Если необходимо выполнить запрос с параметрами, то это будет выглядеть примерно
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">так</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='ls'>Dim con As New ODBCConnection 'Соединение с источником данных
    Dim query As New ODBCQuery 'Запрос к источнику данных
    Dim resultSet As New ODBCResultSet 'Набор данных, получаемый в результате выполнения запроса

    con.ConnectTo "Имя твоего источника данных" 'подключаемся

    query.Connection = con
    query.SQL = "SELECT fieldA, fieldB FROM TheTable WHERE fieldC = ?param?"

    resultSet.Query = query
    resultSet.SetParameter "param", "'значение параметра'" 'устанавливаем значение параметра

    resultSet.Execute 'выполняем запрос[/CODE]
    Для того, чтобы нормально извлекались русские буковки, следует использовать функцию OemToCharA. Для этого в раздел Declarations добавь:
    <!--shcode--><pre><code class='ls'>Declare Function OemToCharA Lib "user32" (Byval lpszSrc As String, Byval lpszDst As String) As Long[/CODE]
    После этого можно уже извлекать русский текст в нормальной кодировке:
    <!--shcode--><pre><code class='ls'>Dim tempString As String, code As Long
    ...
    tempString = resultSet.GetValue("fieldA")
    code = OemToCharA(tempString, tempString)
    'теперь в tempString находится уже строка в нормальной кодировке
    doc.ReplaceItemValue "FieldA", tempString
    ...[/CODE]
    Забыл отметить, если dbf-ка большая, то имеет смысл в настройках ODBC-источника снять галочку на тему извлечения данных в фоновом режиме (не помню точно, как зовется), а то лично у меня, например, агент-импортер из-за нее зависал иногда.
     
  8. SkyRanger

    SkyRanger Active Member

    Регистрация:
    17 мар 2007
    Сообщения:
    44
    Симпатии:
    0
    Это что? У меня куча ошибков <_<

    Это акшн создавать?
     
  9. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    У меня это агент. Насчет ошибков - в студию, разберемся. В любом случае, код приводится в сокращении (так сказать, суть передаю) <_<
     
  10. SkyRanger

    SkyRanger Active Member

    Регистрация:
    17 мар 2007
    Сообщения:
    44
    Симпатии:
    0
    Ааа разобрался надо было в опции добавить:
    Код (Text):
    Uselsx "*LSXODBC"
    Получилось вот что:
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='ls'> Dim con As New ODBCConnection 'Соединение с источником данных
    Dim query As New ODBCQuery 'Запрос к источнику данных
    Dim resultSet As New ODBCResultSet 'Набор данных, получаемый в результате выполнения запроса
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim workspace As New NotesUIWorkspace

    Set db = session.CurrentDatabase

    'con.ConnectTo( "fams")

    If Not con.ConnectTo("fams") Then
    Messagebox "Could not connect to fams"
    Exit Sub
    End If

    Set query.Connection = con
    Set resultSet.Connection = con

    query.SQL = "SELECT STREET_NID,NAME FROM db.streets_names"
    Set resultSet.Query = query

    resultSet.Execute

    'Если что-то вернулось...
    If resultSet.IsResultSetAvailable Then
    'перебираем поля набора данных
    Do
    Call resultSet.NextRow
    Set doc = New NotesDocument(db)
    doc.Form = "streets"
    'извлекаем значение поля набора данных для текущей строки и кладем в
    'одноименное поле документа
    Call doc.ReplaceItemValue ("street_cod", resultSet.GetValue("STREET_NID") )
    Call doc.ReplaceItemValue ("street_name", resultSet.GetValue("NAME"))

    doc.Save True, False
    Loop Until resultSet.IsEndOfData
    resultSet.Close
    End If[/CODE]только что-то нефига не возвращает.

    If resultSet.IsResultSetAvailable Then

    всегда false

    А как правильно настроить ODBC источник???
     
  11. LuMee

    LuMee Well-Known Member

    Регистрация:
    2 май 2006
    Сообщения:
    477
    Симпатии:
    0
    Ну да, забыл про него <_<
    Панель управления - Администрирование - Источники данных (ODBC) - вкладка Пользовательский DSN (хотя можно и системный имхо) - Добавить. В открывшемся диалоге выбираешь драйвер (у меня был для FoxPro, ибо dbf-ка создавалась в FoxPro 2.6), потом открывается диалог, в котором вводишь Data Source Name (имя источника данных, которое будешь использовать при подключении), Database type (я выбирал Free Table directory, ибо файла БД в FP 2.6 не было), указываешь путь к каталогу с твоими dbf-ками. Можешь также таыкнуть Options и снять галочку Fetch data in background (как я упоминал, с этим бывают проблемы).
    А так, еще запрос свой проверь, мож он неправильный... Например, зачем там префикс db перед названием таблицы?
     
  12. SkyRanger

    SkyRanger Active Member

    Регистрация:
    17 мар 2007
    Сообщения:
    44
    Симпатии:
    0
    Сапасибо!

    Все получилось :)

    Оказывается это глючный драйвер фокспро не хочет понимать VFP 9 таблицы.

    Пришлося извращатся конвертить в dbase4 и из них в прогу, в общем все как всегда через одно место o_O
     
  13. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    Доброе время суток

    Есть файл DBF к надо импортнуть. При этом некоторые поля таблицы - кракозяблы. как побороть?

    з.ы. - файл свабодно распространяеммая выписка о банках Украины с сайта нац. банка _http://bank.gov.ua/
    Вот есть, если интересно
    Посмотреть вложение RcuKru.arj.rar

    Scr.JPG
     
  14. Constantin A Chervonenko

    Constantin A Chervonenko Well-Known Member

    Регистрация:
    30 май 2006
    Сообщения:
    1.288
    Симпатии:
    0
    Через LSX. Там для текстовых полей есть LCStream, которому можно задать любое преобразование кодировки.
     
  15. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    всем спасибо, проблем с кодировкой нет. глюки из-за неподдерживания DBF укр. символов І или Ї
     
  16. Eagle69

    Eagle69 Гость

    Добрый день коллеги!

    Столкнулся с задачей - не представляю с какой стороны подойти.

    Есть domino 7 работающий на linux. В некоторую папку скидывается dbf файл. Хочется записи этого файла кинуть в базу.

    Спасибо. Буду рад любым ответам
     
  17. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.078
    Симпатии:
    300
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей