Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / импорт из dbf файла / 6 сообщений из 6, страница 1 из 1
20.07.2012, 23:33
    #37887695
slatapol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
импорт из dbf файла
имеется 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
21.07.2012, 01:06
    #37887724
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
импорт из dbf файла
В принципе, в 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
21.07.2012, 11:27
    #37887805
slatapol
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
импорт из dbf файла
ВладимирМ,
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
21.07.2012, 15:13
    #37887907
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
импорт из dbf файла
Не надо добавлять свой собственный код. То, что я написал - это законченный пример. Вместе с Вашим кодом получился "мусор". Ну, разве-что можно добавить выбор таблицы 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
22.07.2012, 12:24
    #37888273
thunder2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
импорт из dbf файла
slatapol,

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


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