Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Multiselect  [new]
Aghasi
Member

Откуда:
Сообщений: 44
Привет
Может кто-то поможет?
как можно исползавать Multiselect, если нада сделать append несколько
таблиц?
Спосибо
2 авг 06, 09:37    [2953591]     Ответить | Цитировать Сообщить модератору
 Re: Multiselect  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Вы не могли бы более внятно формулировать проблему? Хотя бы по шагам. Например, я делаю так и вот так. А как быть если изменится вот это условие?

Каким "боком" Multiselect относится к Append?
2 авг 06, 11:51    [2954578]     Ответить | Цитировать Сообщить модератору
 Re: Multiselect  [new]
Aghasi
Member

Откуда:
Сообщений: 44
Я из банка каждии ден получаю информацию в виде 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 все вместе прикрепить?
2 авг 06, 15:40    [2956269]     Ответить | Цитировать Сообщить модератору
 Re: Multiselect  [new]
-=AlexiS=-
Member

Откуда: Одесса
Сообщений: 712
смотри в сторону ADIR()
2 авг 06, 15:50    [2956338]     Ответить | Цитировать Сообщить модератору
 Re: Multiselect  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
APPEND FROM за один раз может использовать только один файл-источник. Здесь без вариантов.

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

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

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
2 авг 06, 17:12    [2956902]     Ответить | Цитировать Сообщить модератору
 Re: Multiselect  [new]
Aghasi
Member

Откуда:
Сообщений: 44
foxpro тут сделал ошибку

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

что такое ALINES
2 авг 06, 18:41    [2957360]     Ответить | Цитировать Сообщить модератору
 Re: Multiselect  [new]
GoshaS
Member

Откуда: юг Архангельской обл.
Сообщений: 392
Вот нарыл старенький код, когда надо было файлов 20 в одину таблицу заливать, с периодичностью раз в 2 - 5 дней. :)
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 
2 авг 06, 18:56    [2957430]     Ответить | Цитировать Сообщить модератору
 Re: Multiselect  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Aghasi
foxpro тут сделал ошибку

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

что такое ALINES


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

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

Вообще-то, на основе данного кода мог бы и сам сообразить что делать. Тебе надо проанализировать содержимое символьной переменной lcFileName. Посмотри ее содержимое. Сам поймешь что там и как. Символ "квадратика" в этой переменной - это Chr(0)
3 авг 06, 00:40    [2957915]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить