powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Multiselect
8 сообщений из 8, страница 1 из 1
Multiselect
    #33893557
Aghasi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет
Может кто-то поможет?
как можно исползавать Multiselect, если нада сделать append несколько
таблиц?
Спосибо
...
Рейтинг: 0 / 0
Multiselect
    #33894042
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы не могли бы более внятно формулировать проблему? Хотя бы по шагам. Например, я делаю так и вот так. А как быть если изменится вот это условие?

Каким "боком" Multiselect относится к Append?
...
Рейтинг: 0 / 0
Multiselect
    #33895021
Aghasi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я из банка каждии ден получаю информацию в виде dbf, эти faili я прикрепляю по этому коду
xpr=0
LOCAL lcOldAlias, laFields
lcOldAlias = ALIAS()
lcDBF = GETFILE('dbf')
IF EMPTY(m.lcDBF)
RETURN
ENDIF
sele vvcarum
appe from &lcDBF
xpr=xpr+1
thisform.command5.visible=.t.
thisform.refresh


и по одному,можно сделать так,чтоби эти faili все вместе прикрепить?
...
Рейтинг: 0 / 0
Multiselect
    #33895058
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
смотри в сторону ADIR()
...
Рейтинг: 0 / 0
Multiselect
    #33895368
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
APPEND FROM за один раз может использовать только один файл-источник. Здесь без вариантов.

Единственное, что можно ускорить, это выбор сразу нескольких файлов, затем в цикле давать APPEND FROM на каждый из выбранных файлов по очереди.

Стандартный GetFile() не поддерживает множественный выбор файлов. Он выбирает всегда один и только один файл. Это значит, что либо придется писать самому некий самописный аналог GetFile(), либо искать соответствующие API-функции. Например:

Код: plaintext
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.
oDialog = createobject('MSComDlg.CommonDialog')
* Set the flags for Multi-Select/Explorer 
oDialog.MaxFileSize =  1640  &&  820 
oDialog.Flags = 0x200 + 0x80000

* Set filters 
oDialog.filter = "Database Files (*.dbf)|*.dbf" 

* Specify default filter 
oDialog.FilterIndex =  1 

oDialog.DialogTitle = "Choose files"

* Select Files
oDialog.ShowOpen()

* Save the file name to a variable 
LOCAL lcFileName
lcFileName = oDialog.FileName

oDialog = null
RELEASE oDialog

* Далее делаем разбор полученной строки
* В качестве разделителя выступает Chr( 0 ).
* Первый элемент - это директория, далее, выбранные файлы
LOCAL laFiles( 1 ), lnFiles, lnI, lcNextFile
lnFiles = ALINES(laFiles,lcFileName, 1 ,chr( 0 ))
FOR m.lnI= 2  TO m.lnFiles
	lcNextFile = ADDBS(laFiles[ 1 ])+laFiles[m.lnI]
	select vvcarum
	APPEND FROM (m.lcNextFile)
ENDFOR

Это общая схема. Нужно еще добавить контроль текущей диретории до и после выбора, собственно факт выбора, ну, и много чего еще.

Множественный выбор файлов осуществляется как в explorer. С нажатой клавишей Shift или Ctrl.

PS: код не мой. Взял отсюда, слегка изменив

http://forum.foxclub.ru/read.php?5,26480,26635#msg-26635
...
Рейтинг: 0 / 0
Multiselect
    #33895627
Aghasi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
foxpro тут сделал ошибку

lnFiles = ALINES(laFiles,lcFileName,1,chr(0))

что такое ALINES
...
Рейтинг: 0 / 0
Multiselect
    #33895664
GoshaS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот нарыл старенький код, когда надо было файлов 20 в одину таблицу заливать, с периодичностью раз в 2 - 5 дней. :)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
IF ADIR(a_file, 'newbase\*.dbf')# 0    
	********************помечаю кодировку таблицы
	LOCAL lcFile
	FOR i= 1  TO ALEN(a_file,  1 )
		lcFile=ALLTRIM(a_file(i,  1 ))
		DO prg\cpzero WITH 'newbase\&lcFile' ,  866 
	ENDFOR 
	**********************
	SELECT t_base 
	AFIELDS(a_newbase)
	CREATE cursor c_newbase  codepage= 866  FROM ARRAY a_newbase
	FOR i= 1  TO ALEN(a_file,  1 )
		lcFile=ALLTRIM(a_file(i,  1 ))
		SELECT c_newbase
		APPEND FROM 'newbase\&lcFile' as  866 
		replace kod_f WITH lcFile FOR EMPTY(kod_f) IN c_newbase 
	ENDFOR
endif 
...
Рейтинг: 0 / 0
Multiselect
    #33895964
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aghasifoxpro тут сделал ошибку

lnFiles = ALINES(laFiles,lcFileName,1,chr(0))

что такое ALINES

Функция ALINES() была введена в версии VFP6. В версии VFP7 был добавлен 4 параметр.

Функция формирует из символьной строки массив, где содержимое элемента массива - это фрагмент исходной строки обрамленный спец.символом. Если не указан 4 параметр, то это Chr(13)+Chr(10)

Вообще-то, на основе данного кода мог бы и сам сообразить что делать. Тебе надо проанализировать содержимое символьной переменной lcFileName. Посмотри ее содержимое. Сам поймешь что там и как. Символ "квадратика" в этой переменной - это Chr(0)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Multiselect
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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