powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / импорт из dbf файла
6 сообщений из 6, страница 1 из 1
импорт из dbf файла
    #37887695
slatapol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
имеется dbf файл reg.dbf, из него необходимо извлечь данные и поместить в таблицу sql

думаю делать по след. схеме:

1. открыть dbf файл getfile
2. scan
3. выбрать заполняемый справочник select
найти запись соответствующую импортируемой строке locate for
if found()
выполнить замену данных в справочнике sql на данные из dbf (sqlexec, update)
else
выполнить добавление в справочнике недостающих записей
endif
endscan

Вот что написала:

reg=GETFILE('DBF', 'Открыть файл для импорта:', 'ОК',0)
SCAN
MySqlSelect= "select* from lgota order by name_lgot"
i7= SQLEXEC(con, MySqlSelect, 'rv_lgot')
LOCATE FOR rv_lgot.kod_lgot=reg.kod_lgot
IF FOUND()

endscan

дальше не знаю что делать, посоветуйте пожалуйста
...
Рейтинг: 0 / 0
импорт из dbf файла
    #37887724
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе, в MS SQL можно обратится напрямую к DBF-таблице через ODBC используя OpenRowset(), но если хочется именно построчная запись, то примерно так

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
* Формируем текстовую строку с параметрами, содержащую несколько команд 
* для обновления данных на сервере
Text to MySqlSelect noshow
Update lgota
Set  	f1 = ?reg.f1
	,f2 = ?reg.f2
where lgota.kod_lgot = ?reg.kod_lgot

If @@rowcount = 0
	Insert into lgota (kod_lgot,f1,f2)
		values (?reg.kod_lgot,?reg.f1,?reg.f2)

EndText

* В целях отладки можно посмотреть что находится в этой строке
*?MySqlSelect

* Собственно переброска данных из таблицы DBF до первой ошибки
use reg.dbf in 0 alias reg shared
select reg
scan
	i7= SQLEXEC(con, MySqlSelect)
	if i7<0
		exit
	endif
endscan

if i7<0
	local laError(1)
	=AError(laError)
	MessageBox(laError[2])
else
	MessageBox('Закончили')
endif
...
Рейтинг: 0 / 0
импорт из dbf файла
    #37887805
slatapol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ,
reg=GETFILE('DBF', 'Открыть файл для импорта:', 'ОК',0)
scan
MySqlSelect= "select* from lgota order by name_lgot"
i7= SQLEXEC(con, MySqlSelect, 'rv_lgot')
LOCATE FOR rv_lgot.kod_lgot=reg.kod_lgot
IF FOUND()

* Формируем текстовую строку с параметрами, содержащую несколько команд
* для обновления данных на сервере
Text to MySqlSelect noshow
Update lgota
Set f1 = ?reg.f1
,f2 = ?reg.f2
where lgota.kod_lgot = ?reg.kod_lgot

If @@rowcount = 0
Insert into lgota (kod_lgot,f1,f2)
values (?reg.kod_lgot,?reg.f1,?reg.f2)

EndText

* В целях отладки можно посмотреть что находится в этой строке
*?MySqlSelect

* Собственно переброска данных из таблицы DBF до первой ошибки
use reg.dbf in 0 alias reg shared
select reg
scan
i7= SQLEXEC(con, MySqlSelect)
if i7<0
exit
endif
endscan

if i7<0
local laError(1)
=AError(laError)
MessageBox(laError[2])
else
MessageBox('Закончили')
endif

endif
endscan

ошибок не выдаёт, но импорт е происходит
...
Рейтинг: 0 / 0
импорт из dbf файла
    #37887907
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо добавлять свой собственный код. То, что я написал - это законченный пример. Вместе с Вашим кодом получился "мусор". Ну, разве-что можно добавить выбор таблицы DBF, если Вы не знаете где она находится. Тогда ЗАКОНЧЕННЫЙ (не надо в него НИЧЕГО добавлять) пример будет примерно таким

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
* Формируем текстовую строку с параметрами, содержащую несколько команд 
* для обновления данных на сервере
Text to MySqlSelect noshow
Update lgota
Set  	f1 = ?reg.f1
	,f2 = ?reg.f2
where lgota.kod_lgot = ?reg.kod_lgot

If @@rowcount = 0
	Insert into lgota (kod_lgot,f1,f2)
		values (?reg.kod_lgot,?reg.f1,?reg.f2)

EndText

* В целях отладки можно посмотреть что находится в этой строке
*?MySqlSelect

* Диалог с пользователем для выбора таблицы DBF
Local lcFileName
lcFileName = GETFILE('DBF', 'Открыть файл для импорта:', 'ОК',0)

if empty(lcFileName)
	* Пользователь не выбрал файл
	MessageBox('Отказались от импорта')
	return
endif

* Собственно переброска данных из таблицы DBF до первой ошибки
use (m.lcFileName) in 0 alias reg shared
select reg
scan
	i7= SQLEXEC(con, MySqlSelect)
	if i7<0
		exit
	endif
endscan

if i7<0
	local laError(1)
	=AError(laError)
	MessageBox(laError[2])
else
	MessageBox('Закончили')
endif



PS: Разумеется, я надеюсь, Вы замените условные F1, F2 на имена Ваших полей таблиц.

PPS: Очень желательно, чтобы Вы хотя бы читали справку FoxPro по используемым Вами же командам и функциям. Копирование кусков кода без понимания смысла того, что делает этот код - крайне порочная практика. Пока я не вижу, чтобы Вы понимали то, что делаете.
...
Рейтинг: 0 / 0
импорт из dbf файла
    #37888273
thunder2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
slatapol,

Мадам, оформляйте Ваши посты по-человечески. Когда пишете пост обратите внимание на кныпочку "SRC". Она помогает преобразить Ваш код из каши-малаши в удобочитаемый вид. Имей хоть малейшее уважение к тем, кому адресуете свой вопль о помощи. Читать "аляпистоскпированное" из фоксы и вставленное "абы-как" в пост очень не приятно.
...
Рейтинг: 0 / 0
импорт из dbf файла
    #37888308
piva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
thunder2, +100500, я бы сказал - неуважение к тем, кому обращаешься за помощью.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / импорт из dbf файла
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]