Lotus и DBF

  • Автор темы at-soft-utility
  • Дата начала
Статус
Закрыто для дальнейших ответов.
D
#2
Для решения такого и подобных вопросов использую программы написанные на Дельфи. Основа - набор компонентов DNotes. Гибкость получается абсолюной. Компоненты позволяют читать и писать в лотусные базы, а всё остальное решается на Delphi
 
V

Vagor.ini

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

Guest

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

Azazel

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

SkyRanger

Active member
17.03.2007
44
0
#7
Как из dbf файла импортировать данные. Т.е. мне нужно создать документ для каждой строки dbf файла и заполнить поля документа данными из столбцов dbf

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

LuMee

Well-known member
02.05.2006
477
0
#8
Страдалец :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-источника снять галочку на тему извлечения данных в фоновом режиме (не помню точно, как зовется), а то лично у меня, например, агент-импортер из-за нее зависал иногда.
 

LuMee

Well-known member
02.05.2006
477
0
#10
У меня это агент. Насчет ошибков - в студию, разберемся. В любом случае, код приводится в сокращении (так сказать, суть передаю) <_<
 

SkyRanger

Active member
17.03.2007
44
0
#11
Ааа разобрался надо было в опции добавить:
Код:
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 источник???
 

LuMee

Well-known member
02.05.2006
477
0
#12
Ааа разобрался надо было в опции добавить:

Uselsx "*LSXODBC"
Ну да, забыл про него <_<
А как правильно настроить ODBC источник???
Панель управления - Администрирование - Источники данных (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 перед названием таблицы?
 

SkyRanger

Active member
17.03.2007
44
0
#13
Сапасибо!

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

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

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

morpheus

скриптописец
07.08.2006
3 915
1
#14
Доброе время суток

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

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

Scr.JPG
 

Вложения

morpheus

скриптописец
07.08.2006
3 915
1
#16
всем спасибо, проблем с кодировкой нет. глюки из-за неподдерживания DBF укр. символов І или Ї
 
E

Eagle69

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

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

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

Спасибо. Буду рад любым ответам
 
Статус
Закрыто для дальнейших ответов.