Текущее время: Пн, июл 28 2025, 10:40

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Загрузка з файла *.DBF в таблицу
СообщениеДобавлено: Пн, авг 30 2010, 15:25 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, фев 04 2009, 09:51
Сообщения: 421
Пол: Женский
Я читаю ДБФ файл через ОЛЕ! Но почемуто переменная eof не изменяется после get property of rs 'EOF' = eof. Постоянно пустое значение Хотя после этого она должна пиринимать "0"Хотя SY-subrc = 0 !!! Файл не читается хотя код возврата после каждого оператора SY_SUBRC = 0 Кроме get property of rs 'State' = state. Тут SY-subrc = 3 ???
В чем причина ? Что не верно? Подскажите!
WAY = 'e:\ЛЕАТ\файли леат\test.dbf'.

include ole2incl.
data: connection type ole2_object, rs type ole2_object
,connectionstring(500), state type i, sql(1000), eof
,time_begin like sy-uzeit, time_end like sy-uzeit.
concatenate 'Provider=vfpoledb;Data Source=' way ';' *
'Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;'
'Deleted=Yes;' into connectionstring.
sql = 'SELECT * From test' .
create object connection 'adodb.connection'.
*create object connection 'adodb.connectionk'.
set property of connection 'ConnectionString' = connectionstring.
call method of connection 'Open'.
create object rs 'adodb.recordset'.
get property of rs 'State' = state.
if state = 1. call method of rs 'Close'.
endif.
set property of rs 'CursorType' = 1. "3
set property of rs 'LockType' = 1.
set property of rs 'CursorLocation' = 2. "2
set property of rs 'ActiveConnection' = connection.
call method of rs 'Open' exporting #1 = sql.
call method of rs 'MoveFirst'.
get property of rs 'EOF' = eof.
call method of rs 'Fields' = period exporting #1 = 'period'.

while eof = '0'.
get property of period 'Value' = itab-x1.

call method of rs 'MoveNext'.

get property of rs 'EOF' = eof.

append itab.
endwhile.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Загрузка з файла *.DBF в таблицу
СообщениеДобавлено: Пн, авг 30 2010, 16:39 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
Чаше всего проблема возникает еще на этапе настройки ODBC Data Source на рабочей станции. Проверьте правильность, правильно ли вы выбрали и настроили провайдера. Вы выбрали драйвер Foxpro (он настроен?), хотя в системе по умолчанию используется 'dBASE Files' для чтения DBF.
Второе, вы используете adodb connection, но насколько помню, этого провайдера нужно ставить отдельно и работал он с SQL базой, а не с DBF. (за это не ручаюсь, может в SAP этот драйвер универсальный)

Там есть вкладка Traicing, включите ее и посмотрите логи при коннекте из SAP.

Сравните ваш пример с рабочим (но это не DBF): SQL Server Connection and Data retrieving

_________________
С уважением, VGA
Мой блог


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка з файла *.DBF в таблицу
СообщениеДобавлено: Вт, авг 31 2010, 06:11 
Младший специалист
Младший специалист

Зарегистрирован:
Вт, авг 05 2008, 19:46
Сообщения: 96
Откуда: С Урала
Из разработанного и не примененного
Code:
* создаем объекты
  CREATE OBJECT excel 'EXCEL.APPLICATION'.
  subrc1 '052'  .
*  SET PROPERTY OF excel 'Visible'    = 1.
  CALL METHOD OF excel 'Workbooks' = h_book.
  subrc1 '053'  .
  CALL METHOD OF h_book 'Add'.
  subrc1 '053' .
  CALL METHOD OF excel 'Worksheets' = h_sheet
    EXPORTING #1 = 'Лист1'.
  subrc1 '053' .
  CALL METHOD OF h_sheet 'Activate'.
  subrc1 '053' .
  SET PROPERTY OF excel 'DisplayAlerts' = 'False'.
  subrc1 '054' .
  GET PROPERTY OF excel 'ActiveWorkBook' = h_book.
  subrc1 '054' .
* сохраняем книгу
  CALL METHOD OF h_book 'SAVEAS'
    EXPORTING #1 = lc_temp.
  subrc1 '053' .
  SET PROPERTY OF excel 'DisplayAlerts' = 'True'.
  subrc1 '054' .
  connectionstring  = 'ODBC;DSN=dBASE Files;DefaultDir=C:\;DriverId=533;MaxBufferSize=2048;PageTimeout=5;'.
* создаем соединение и строим запрос к БД
  CONCATENATE 'SELECT NEWNUM as BANKL, NEWNUM as bnklz, NAMEP as banka , NNP as ort01, KSNP as BRNCH, ADR as STRAS FROM '
               tab_file-filename INTO sql SEPARATED BY space.
  CALL METHOD OF h_sheet 'Range' = h_range
    EXPORTING #1 = 'A1'.
  subrc1 '053' .
  CALL METHOD OF h_range 'WorkSheet' = h_tables.
  subrc1 '053' .
  CALL METHOD OF h_tables 'QueryTables' = h_tables.
  subrc1 '053' .
  CALL METHOD OF h_tables 'Add' = h_table
    EXPORTING
    #1 = connectionstring
    #2 = h_range
    #3 = sql.
  subrc1 '053'.
  SET PROPERTY OF h_table 'AdjustColumnWidth' = 0.
  subrc1 '054' .
  SET PROPERTY OF h_table 'RefreshStyle' = 0.
  subrc1 '054'.
* считываем данные из БД
  CALL METHOD OF h_table 'Refresh'.
  subrc1 '053' .
*** вставляем задержку
  WAIT UP TO '1.200' SECONDS.
  CALL METHOD OF h_table 'Delete'.
  subrc1 '053' .
  CALL FUNCTION 'FLUSH'
    EXCEPTIONS
      OTHERS = 1.
  IF sy-subrc NE 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
** Удаляем запрос из книги (данные остаются)
  GET PROPERTY OF  h_sheet 'UsedRange' = h_over.
  GET PROPERTY OF  h_over  'Rows'      = h_over1.
  GET PROPERTY OF h_over1  'Count'     = lc_count.   "определяем к-во записей в запросе
  IF lc_count < 2.     " на всякий случай если ошибемся
    lc_count =  9999.
  ENDIF.
* Close  и выходим из Excel
  CALL METHOD OF h_book 'SAVE'.
  subrc1 '053'.
  CALL METHOD OF h_book 'CLOSE'.
  subrc1 '053' .
  CALL METHOD OF excel 'QUIT'.
  subrc1 '053' .
  free_ole.
  WAIT UP TO '0.200' SECONDS.
**** Считываем данные в таблицу
  CALL FUNCTION '****EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      m_file_name             = lc_temp
      i_begin_col             = 1
      i_begin_row             = 1
      i_end_col               = 6
      i_end_row               = lc_count
    TABLES
      ch_data                 = lt_bnka
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      read_failed             = 3
      OTHERS                  = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
             WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ELSE.
    IF lt_bnka IS NOT INITIAL .
      LOOP AT lt_bnka INTO wa_loc.
        CLEAR wa_itab.
        MOVE-CORRESPONDING wa_loc TO wa_itab.
        APPEND  wa_itab TO itab_bnka.
      ENDLOOP.
    ENDIF.
  ENDIF.

Хотя более отработанным способом считаю ( и пользуюсь) созранением через Excel в текстовый файл и его стандартной загрузкой - быстрее во мног раз


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка з файла *.DBF в таблицу
СообщениеДобавлено: Вт, авг 31 2010, 10:01 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, фев 04 2009, 09:51
Сообщения: 421
Пол: Женский
Уважаемый Директор Вы написали
Вы выбрали драйвер Foxpro (он настроен?), хотя в системе по умолчанию используется 'dBASE Files' для чтения DBF.

Подскажите в каком месте настроек системы можно поменять значение по умолчанию для чтения DBF ????


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Загрузка з файла *.DBF в таблицу
СообщениеДобавлено: Вт, авг 31 2010, 14:13 
Председатель
Председатель
Аватара пользователя

Зарегистрирован:
Чт, апр 13 2006, 12:32
Сообщения: 1503
Откуда: Питер
oko_5 написала:
Подскажите в каком месте настроек системы можно поменять значение по умолчанию для чтения DBF ????


Добрый день. Я прошу прощения, но раз вы задаете такой вопрос, видимо код был вами просто откуда то скопирован и вы не очень разбираетесь в выбранной вами технологии. Не обижайтесть. Если вы будете менять настройки ODBC Data Source, то это придется делать на каждой клиентской машине, чтобы ваша программа могла работать у любого пользователя.

Поэтому я бы рекомендовал использовать более простой вариант, загрузить dbf файл с локального компьютера во внутреннюю таблицу и далее выполнить преобразование.
http://www.sapnet.ru/viewtopic.php?t=1240&highlight=dbf
Или использовать Excel (есть ограничения по количеству строк и длине полей)
http://www.sapnet.ru/viewtopic.php?t=835&highlight=dbf

А OBDC Data Source настраивается в Windows: Settings - Control Panel - Administrative Tools - Data Source (ODBC)

_________________
С уважением, VGA
Мой блог


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Загрузка з файла *.DBF в таблицу
СообщениеДобавлено: Ср, сен 01 2010, 16:25 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, фев 04 2009, 09:51
Сообщения: 421
Пол: Женский
Cпасибо! Переинстал виндовс и все пошло !Был запорчен ODBC я думаю программой DBFCOMANDER запорчена библиотека VFPOLEDB.DLL!
Теперь следующая проблема!
В ДБФ файле поля числвые Так почему-то переносятся нули !
data: begin of itab occurs 100,
x1 type і.
data: end of itab.

get property of period 'Value' = itab-x1.

itab-x1 =0 Хотя в ДБФ файле это числовое поле поле имеет не нулевое значение !
Почему?Не хочется в ДВФ делать все символьные поля!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Загрузка з файла *.DBF в таблицу
СообщениеДобавлено: Чт, янв 10 2013, 15:07 
Специалист
Специалист

Зарегистрирован:
Ср, дек 07 2005, 09:18
Сообщения: 141
Откуда: Запорожье
Добрый день.
Если кто разбирался с этой тема, то возник такой вопрос.
В считываемом файле (DBF) есть одно поле цифровое, и преобразованние данным кодом http://www.sapnet.ru/viewtopic.php?t=1240&highlight=dbf выдает абсолютно неверные данны. Если вместо цифровых подставить символом значения ввиде 2547,02 то преобразования получаются красиво.
А если использовать преобразование по этомоу методу http://www.sapnet.ru/viewtopic.php?t=835&highlight=dbf через Excel поля в которых записаны данные в Кирилеце выводятся ввиде знаков вопроса (?????????????).

Вот теперь не знаю как поступить, и какой метод использовать.
Если кто поборол данные вещи как у меня, поделитесь советом, как это сделать.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB