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

Откуда:
Сообщений: 144
Здравствуйте. Помогите разобраться. Есть таблица с полями kod_prib(type=character) и now_kod(type=numeric). Как при записи поля now_kod, записывать поле kod_prib? now_kod=kod_prib.
Пороцедура Init:
lparameters tcMode

if upper(evl(tcMode, "")) = "NEW"
	this.txtkod_prib.value = 0
	this.lNew = .t.
else
    this.txtkod_prib.value = spr_prib.now_kod
    	
endif
Пороцедура save:
local llOk
do case
	case empty(this.txtmarka.value)
		=MESSAGEBOX("Введите марку счетчика" );
		this.txtmarka.setfocus()
			
	otherwise
		if thisform.lNew
			insert into spr_prib ;
				(now_kod) ;
				values ;
				(this.txtkod_prib.value)
		else
			replace next 1 in spr_prib ;
			now_kod with this.txtkod_prib.value,;
				
		endif
		llOk = .t.
endcase
return llOk
12 сен 11, 21:37    [11266388]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по таблице  [new]
IgorNG
Member

Откуда: Москва
Сообщений: 956
Андрей1985,

А зачем два одинаковых поля, только одно цифровое, а другое текстовое?
13 сен 11, 09:05    [11267091]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по таблице  [new]
Андрей1985
Member

Откуда:
Сообщений: 144
IgorNG, дело в том, что нужно заполнить таблицу для foxpro2.6, не меняя структуры таблицы. У меня заполняется поле now_kod(числовое), нужно, чтобы при заполнении поля now_kod заполнялось поле kod_prib(текстовое поле).
Так, почему-то не работает.
repl kod_prib with allt(str(now_kod))
13 сен 11, 11:21    [11267857]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по таблице  [new]
IgorNG
Member

Откуда: Москва
Сообщений: 956
Андрей1985
IgorNG, дело в том, что нужно заполнить таблицу для foxpro2.6, не меняя структуры таблицы. У меня заполняется поле now_kod(числовое), нужно, чтобы при заполнении поля now_kod заполнялось поле kod_prib(текстовое поле).
Так, почему-то не работает.
repl kod_prib with allt(str(now_kod))

Не работает - этот как? Какая ошибка?
13 сен 11, 11:50    [11268105]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по таблице  [new]
Андрей1985
Member

Откуда:
Сообщений: 144
IgorNG,
процедура Init:
lparameters tcMode

if upper(evl(tcMode, "")) = "NEW"
	this.txtkod_prib.value = 0
	this.txtvid_prib.value = ""
	thisform.txtNai_prib.Value=""
	thisform.combofirma.Value=""
	thisform.txtmarka.Value=""
	thisform.txtmodel.Value=""
	thisform.txtmoh.Value=0
	thisform.txttimerab.Value=0
	thisform.txtrashod.Value=0
	
	this.lNew = .t.
else
    this.txtkod_prib.value = spr_prib.now_kod
    this.txtvid_prib.value = spr_prib.vid_prib
    this.txtNai_prib.value = spr_prib.Nai_prib
    this.combofirma.value = spr_prib.firma
    this.txtmarka.value = spr_prib.marka
     this.txtmodel.value = spr_prib.model
    this.txtmoh.value = spr_prib.pasp_moh
    this.txttimerab.value = spr_prib.timerab
    this.txtrashod.value = spr_prib.rashodgp
    !ALLTRIM(STR(this.txtkod_prib.value)) = spr_prib.kod_prib
    	
endif

SELECT MAX(now_kod)+1 AS Maxnow_kod FROM MyKodGP INTO CURSOR MyGP1
SELECT MyGP1
THISFORM.txtkod_prib.Value = MyGP1.Maxnow_kod 

thisform.txtvid_prib.Value="1"
thisform.txtNai_prib.Value="Плита газов."

Прооцедура Save:
local llOk

do case
   case empty(this.combofirma.value)
		=MESSAGEBOX("Введите производителя ГП" );
		this.combofirma.setfocus()

	case empty(this.txtmarka.value)
		=MESSAGEBOX("Введите марку ГП" );
		this.txtmarka.setfocus()
		
	case empty(this.txtmarka.value)
		=MESSAGEBOX("Введите модель ГП" );
		this.txtmarka.setfocus()
		
		otherwise
		if thisform.lNew
			insert into spr_prib ;
				(now_kod,vid_prib,nai_prib,firma,marka,model,pasp_moh,timerab,rashodgp,kod_prib) ;
				values ;
				(this.txtkod_prib.value,this.txtvid_prib.value,this.txtnai_prib.value,this.combofirma.value,this.txtmarka.value,this.txtmodel.value,this.txtmoh.value,this.txttimerab.value,this.txtrashod.value,!ALLTRIM(STR(this.txtkod_prib.value)))
		ELSE
		    
			replace next 1 in spr_prib ;
			now_kod with this.txtkod_prib.value,;
			vid_prib with this.txtkod_prib.value,;
			nai_prib with this.txtnai_prib.value,;
			firma with this.combofirma.value,;
			marka  with this.txtmarka.value,;
			model with this.txtmodel.value,;
			pasp_moh with this.txtmoh.value,;
			timerab with this.txttimerab.value,;
			rashodgp with this.txtrashod.value,;
			kod_prib WITH !ALLTRIM(STR(this.txtkod_prib.value))
							
		endif
		
		llOk = .t.
endcase

return llOk
Выдет ошибку "data type mismatch "
Выдет ошибку "data type mismatch ", т.е. несовпадение типов полей.
13 сен 11, 14:50    [11269723]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по таблице  [new]
IgorNG
Member

Откуда: Москва
Сообщений: 956
Андрей1985,

Правильно.

if upper(evl(tcMode, "")) = "NEW"
this.txtkod_prib.value = 0 && Числовое поле


if thisform.lNew
insert into spr_prib ;
(now_kod,vid_prib,nai_prib,firma,marka,model,pasp_moh,timerab,rashodgp,kod_prib) ;
values ;
(this.txtkod_prib.value,this.txtvid_prib.value,this.txtnai_prib.value,this.combofirma.value,this.txtmarka.value,this.txtmodel.value,this.txtmoh.value,this.txttimerab.value,this.txtrashod.value,!ALLTRIM(STR(this.txtkod_prib.value)))

А зачем воцклицательный знак? Что по-твоему будет означать выражение NOT ALLTRIM(STR(this.txtkod_prib.value))
13 сен 11, 15:01    [11269845]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по таблице  [new]
Андрей1985
Member

Откуда:
Сообщений: 144
Вот я ибалбе!!!
IgorNG, не подскажите,в чем может быть причина. Создавал таблицу в VFP9. Почему таблица не открывается в Foxpro2.6 ?
А если создаю в Foxpro2.6 и хочу открыть в VFP9, то говорит "Database is invalid. Please valid date".
13 сен 11, 15:26    [11270068]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по таблице  [new]
Андрей1985
Member

Откуда:
Сообщений: 144
Андрей1985
Вот я ибалбе!!!
IgorNG, не подскажите,в чем может быть причина. Создавал таблицу в VFP9. Почему таблица не открывается в Foxpro2.6 ?
13 сен 11, 15:32    [11270128]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по таблице  [new]
IgorNG
Member

Откуда: Москва
Сообщений: 956
Андрей1985,

Таблицы VFP9 в более ранних версиях открыть нельзя. В VFP9 можно открывать таблицы ранних версий. Возможно, таблица испорчена. Попробуй set tablevalidate to 0 или http://www.cmstory.com/modules.php?op=modload&name=Downloads&file=index&req=getit&lid=6
13 сен 11, 15:33    [11270142]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по таблице  [new]
SSn888
Member

Откуда:
Сообщений: 340
Андрей1985, эээ... как-то так :)

процедура Init:

lparameters tcMode

this.lNew = (upper(evl(tcMode, "")) == "NEW")
* Кстати - а где в Вашем коде с этой переменной снимается флаг "Истина"?

sele spr_prib

if this.lNew
scatter blank name spr_Tmp
else
scatter name spr_Tmp
endif

this.txtkod_prib.ControlSource = "spr_Tmp.now_kod"
this.txtvid_prib.ControlSource = "spr_Tmp.vid_prib"
this.txtNai_prib.ControlSource = "spr_Tmp.Nai_prib"
this.combofirma.ControlSource = "spr_Tmp.firma"
this.txtmarka.ControlSource = "spr_Tmp.marka"
this.txtmodel.ControlSource = "spr_Tmp.model"
this.txtmoh.ControlSource = "spr_Tmp.pasp_moh"
this.txttimerab.ControlSource = "spr_Tmp.timerab"
this.txtrashod.ControlSource = "spr_Tmp.rashodgp"

.....

Процедура Save:

local llOk

do case
...
otherwise
sele spr_prib
if thisform.lNew
appe blank
endif
gather name spr_Tmp
...
endcase
13 сен 11, 17:27    [11271165]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по таблице  [new]
Андрей1985
Member

Откуда:
Сообщений: 144
Сейчас сделал следующее, создал таблицы в 2.6. Перекинул в папку dbf базы VFP. В VFP открывается, но тут какие-то проблемы с кодировкой. В таблице вручную заношу значения в строку (cntr+y), сохраняю таблицу, но теперь она уже не открывается в FP2.6.
В config прописал
codepage=866
systemmenu=off
MVCOUNT=30000

А если после создания таблиц в VFP их прекодировать под дос866.Такое возможно?
Как нибудь,
[code=foxpro]
copy to table AS 866
[/code]но я так делаю, но по прежнему, дос не открывает.
13 сен 11, 17:45    [11271300]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по таблице  [new]
Андрей1985
Member

Откуда:
Сообщений: 144
Делаю в VFP забивалку значений справочников, для FP2.6.
13 сен 11, 17:46    [11271326]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по таблице  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
Варианты совместной работы FPD2.6 и Visual FoxPro

1. Открывать таблицы FoxPro for DOS в среде Visual FoxPro через драйвер ODBC.

2. В среде FoxPro for DOS таблица обязательно должна иметь признак кодовой страницы. Как правило, это 866. Индексы допустимы только по именам полей. Никаких функций в выражении индекса быть не должно. Такие таблицы без проблем открываются и редактируются в среде Visual FoxPro как свободные таблицы. Включать их в контейнер базы данных не надо

3. Создать и наполнить таблицу в середе Visual FoxPro затем сконвертировать ее в формат FoxPro for DOS командой вида

select MyTab
copy to TabForDOS type FOX2X as 866
13 сен 11, 18:24    [11271530]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по таблице  [new]
SSn888
Member

Откуда:
Сообщений: 340
Андрей1985
Сейчас сделал следующее, создал таблицы в 2.6. Перекинул в папку dbf базы VFP. В VFP открывается, но тут какие-то проблемы с кодировкой. В таблице вручную заношу значения в строку (cntr+y), сохраняю таблицу, но теперь она уже не открывается в FP2.6.
В config прописал
codepage=866
systemmenu=off
MVCOUNT=30000

А если после создания таблиц в VFP их прекодировать под дос866.Такое возможно?
Как нибудь,
[code=foxpro]
copy to table AS 866
[/code]но я так делаю, но по прежнему, дос не открывает.


1. Создаем таблицу в ФоксДос
2. Открываем в 9-ке _эксклюзивно_
3. Запросит кодировку - выбираем "родную" - 866
4. Собственно - все

Если будет глючить с кодировкой - снесите намек на нее (см cpzero)
Ну и... Почитайте доку по SET NOCPTRANS и рядом-около

И еще момент... пытаясь создать ее все-таки в ВФП - обратите внимание, чтоб она была ФРИ, не принадлежала какой-то БД

ВладимирМ, пункт 1... жесть... зачем? Можно конечно еще и IIS прикрутить.. но :):)
13 сен 11, 19:00    [11271654]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по таблице  [new]
SSn888
Member

Откуда:
Сообщений: 340
гм... вдогонку...
"снесите при помощи cpzero" - и естественно - опять октройте экслюзивно 9-кой и укажите 866
13 сен 11, 19:02    [11271665]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по таблице  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
SSn888
ВладимирМ, пункт 1... жесть... зачем?

Это не "жесть". Это самый беспроблемный способ доступа во всех смыслах. Все остальные работают с оговорками. Всегда надо будет "пальцем придерживать"

Например, если выражение индекса содержит функцию вида UPPER(MyField), то при редактировании DOS-таблицы в VFP индекс будет безнадежно испорчен. Его придется перестраивать в FPD.

Старые драйвера ODBC вообще не требуют наличия признака кодовой страницы. Они его не проверяют. Это значит, что не возникнет диалога на предмет установки 866 кодовой страницы.

Поскольку обращение будет идти напрямую к рабочей таблице, то и не возникнет необходимости в пересоздании и замены. Не надо будет после COPY TO что-то там "переливать" в DOS-таблицы.

Другими словами, подключение по ODBC, хотя и кажется более сложным в исполнении, но сопровождается меньшим количеством проблем связанных с совместимостью старых и новых версий FoxPro.
13 сен 11, 20:12    [11272022]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по таблице  [new]
Андрей1985
Member

Откуда:
Сообщений: 144
Спасибо, получилось.
Сконвертировал таблицу в формат FoxPro for DOS командой вида
select MyTab
copy to TabForDOS type FOX2X as 866
13 сен 11, 22:07    [11272441]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по таблице  [new]
SSn888
Member

Откуда:
Сообщений: 340
ВладимирМ, я исходил из того, что таблица уже имеется, работает под Досом и создана одним из предшественников автора сабжа.
Вряд ли там понадобиться определять новые индексы и так далее...
Все Вами приведенные плюсы работы через ОДБС верно, но - это примерно как читать файлы старого ворда в 2077 версии при помощи использования кубов :)
ИМХО - лишняя трата времени и сил... сугубо ИМХО

В любом случае - рад за Андрея :)
14 сен 11, 13:27    [11275104]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по таблице  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7864
SSn888
ВладимирМ, я исходил из того, что таблица уже имеется, работает под Досом и создана одним из предшественников автора сабжа.
Вряд ли там понадобиться определять новые индексы и так далее...

Определять новые индексы - не понадобиться. Но изменить или удалить существующие - невозможно. С очень высокой степенью вероятности там будет присутствовать индекс по UPPER(MyField)

С признаком кодовой страницы - дополнительные сложности. Установить-то его не проблема, но, опять же, нет гарантии, что он не будет удален при каких-либо модификациях таблицы в самом DOS-приложении. Например, в FPD2.0 он вообще не записывался. Значит, после PACK может оказаться удаленным.

Это значит, что, в общем случае, подключится напрямую к DOS-таблице - невозможно. Все-равно придется писать некий "переходник". По сути, делать некий аналог ODBC своими руками. Ну, разве что, контроль целостности DOS-базы данных будет в одном месте, а не "размазан" между DOS и VFP приложениями.

Что, собственно, автор темы и сделал. Ведь он, скорее всего, полученную DOS-таблицу не будет использовать напрямую. А будет писать некий код, по заливке данных из этой промежуточной таблицы в DOS-приложение.

Т.е. как раз-таки кажущееся более простым решение и приведет "к лишней трате времени и сил".
14 сен 11, 14:32    [11275719]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по таблице  [new]
SSn888
Member

Откуда:
Сообщений: 340
ВладимирМ, Ваша аргументация великолепна

Разве что "Это значит, что, в общем случае, подключится напрямую к DOS-таблице - невозможно" как-то не соответствует истине... Ни один десяток раз именно так и делал, все было в ажуре. С учетом того, что как понимаю - модифицироваться в Досе таблица не будет.
Просто не стоит забывать про ситацию когда на одной хиленькой машинке стоит Дос или версия Винды 1812 года (да-да, в наше время такое щщо есть, к сожалению, особенно на некоторых дотационных госпредприятиях), а на другой уже нормальной планируется софтина на ВФП. Это - типичный вариант, объясняющий "почему достаточно большая часть софта до сих пор на Фокс2.6 и от разработанных для него приложений нельзя отказаться". Вот тут-то одно дело - с более мощной машины по сети дергать табличку, а совсем другое - устраивать песни и пляски с ОДБС.

Если же эта таблица используется только как некий шлюз для переливки данных в Дос-приложение - тогда вообще зачем огород городить со всеми этими совместимостями и прочим? Кидать пакеты в текстовый файл и подбирать их оттуда другим приложением - и надежней, и проще...

В любом случае - повторюсь - не совсем ясно "зачем" (лично мне) и "в каких условиях", а без понимания картины, которую хочет получить автор вопроса - у нас будет не больше чем абстрактный разговор за чашкой
14 сен 11, 14:53    [11275905]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить