выборка из поля text1

longfast
Дата: 08.12.2012 22:11:16
Здравствуйте. Помогите пожалуйста с кодом. Суть в том, чтоб в форме, в поле text1 пользователь писал код товара(поле типа integer) и в таблице

программа искала этот товар и копировал записи в другую таблице (poisktovara). буквы ищет(charater), а цифры(integer) выдает ошибку.вот код

кнопки.Помогите пожалуйства.уже месяц мучаюсь

DELETE FROM poisktovara
insert into poisktovara (kodtovara,naimtovara,texxarakter,opisanie,partiya,kolvo,stoimzak,stoimpokup,nalichie) Select

товары.kodtovara,товары.naimtovara,товары.texxarakter,товары.opisanie,поставки.partiya,поставки.kolvo,поставки.stoimzak,поставки.stoimpokup,поста

вки.nalichie FROM товары,поставки WHERE товары.kodtovara = поставки.kodtovara and SUBSTR(ALLTRIM(товары.naimtovara),2,3) like SUBSTR(ALLTRIM

(thisform.text2.value),2,3) AND [поставки.kodtovara]=(thisform.text1.Value)
DO FORM поисктовара



обычно выдает ошибку operator operand type mismatch. типы поля всех 3 таблиц идиентичны
Dag
Дата: 08.12.2012 23:54:48
Добавьте перед вашим кодом строки
wait window vartype(thisform.text1.Value)
wait window vartype(поставки.kodtovara)
и сообщите результат
longfast
Дата: 09.12.2012 17:12:56
Dag,
ничего не происхит.после 3 нажатия выпадает окно alias 'поставки' is not found
longfast
Дата: 09.12.2012 17:14:00
мне кажется, что не работает копирование в другую таблицу
AndreTM
Дата: 09.12.2012 20:36:08
А так (вместо всего вышеприведенного вами кода)?
lnKodtovara=val(thisform.text1.Value)
lcNailtovara=SUBSTR(ALLTRIM(thisform.text2.value),2,3)
Select t.kodtovara,t.naimtovara,t.texxarakter,t.opisanie,p.partiya,p.kolvo,p.stoimzak,p.stoimpokup,p.nalichie ;
 FROM товары t INNER JOIN поставки p ON t.kodtovara = p.kodtovara ;
 WHERE p.kodtovara=lnKodtovara AND SUBSTR(ALLTRIM(товары.naimtovara),2,3) == lcNaimtovara ;
 INTO TABLE poisktovara
DO FORM поисктовара
reware
Дата: 09.12.2012 21:35:16
longfast
Помогите пожалуйста с кодом. Суть в том, чтоб в форме, в поле text1 пользователь писал код товара(поле типа integer) и в таблице
программа искала этот товар и копировал записи в другую таблице (poisktovara). буквы ищет(charater), а цифры(integer) выдает ошибку.вот код
кнопки.Помогите пожалуйства.уже месяц мучаюсь

Ещё два года будешь мучаться, пока не поймёшь, что "в поле text1" ты забиваешь символы (это текстовое поле). И цифирьки забиваемые туда воспринимаются программой, как строковые символы, а не числа. Отсюда и "operator operand type mismatch" (несоответствие типов операндов). Тут, конечно, непонятно было, чего вы там в этот несчастный text1 пытались вводить, но, если к примеру что-то типа "123456", то это СТРОКА, но ещё не число. Чтобы "123456" стало числом, надо использовать функцию VAL("123456") которая вернёт уже чисто число 123456.
P.S. И кончайте с русскоязычными именами таблиц/переменных, к добру не приводит.
longfast
Дата: 09.12.2012 23:31:56
AndreTM,Код к сожалению не работает. я доработал свой код и всё заработало.но к сожалению не так как надо. Корректно ищет лишь только по названию товара. а по коду товара находит аж 40 записей(хотя у меня их всего 16).Это из за or. если ставлю and то ищет норм но только когда выбирает одновременно из 2 полей (text1 и text2). Вот как теперь сделать так чтоб выбирало только из одного поля(т.е из поля text1 или text2 или одновременно из обоих)?

SET DELETED ON
DELETE FROM poisktovara
insert into poisktovara(pole1,pole2,texxarakter,opisanie,partiya,stoimzak,stoimpokup,kolvo,nalichie) Select товары.kodtovara,товары.naimtovara,товары.texxarakter,товары.opisanie,поставки.partiya,поставки.kolvo,поставки.stoimzak,поставки.stoimpokup,поставки.nalichie FROM товары,поставки WHERE товары.kodtovara = поставки.kodtovara AND SUBSTR(ALLTRIM(товары.naimtovara),2,3) like SUBSTR(ALLTRIM(thisform.text2.value),2,3) or поставки.kodtovara=(thisform.text1.Value)
AndreTM
Дата: 10.12.2012 02:36:19
Какая у вас версия ФоксПро?
В каком месте "код не работает"?
В чем глубинный смысл использования DELETE FROM с последующим INSERT?
В чем смысл LIKE?
Опишите структуру таблиц (с типами полей), а то, действительно, похоже у вас kodtovara - символьное... но тогда зачем рассуждения об integer?
Вообще, какую логику вы пытаетесь заложить в выборку (в WHERE)?
Jonny540
Дата: 10.12.2012 11:46:44
longfast
Вот как теперь сделать так чтоб выбирало только из одного поля(т.е из поля text1 или text2 или одновременно из обоих)?
Чем это определяется? Если наличием/отсутствием данных в одном из полей,то проще подготовить заранее
строку "условие" - и вперед! Типа:
lcStroka=""
lcV1=Thisform.text1.Value
lcV2=allt(Thisform.text2.Value)
do case
  case !Empty(lcV1) and Empty(lcV2)
    lcStroka= "поставки.kodtovara=lcV1"
  case Empty(lcV1) and !Empty(lcV2)

  case !Empty(lcV1) and !Empty(lcV2)

  otherwise
    messagebox("Идите в баню!")
endcase

* остальные условия допилите сами, ну и в SELECT:

... WHERE  &cStroka
longfast
Дата: 10.12.2012 12:21:57
AndreTM,
Версия foxpro 9.0
код не работает в самой первой строчке lnKodtovara=val(thisform.text1.Value) выдает ошибку function argument value,type,or count is invalid
delete from я использую для очистки таблицы. Весь смысл моего кода заключается в том, что я использую оператор insert select, т.е из запроса (select) я выбираю данные, которые совпадают(=) с значением поля text1 для цифр, и like (типа = для букв) для charater.
и у меня получается данные, которые я нахожу с помощью select копируются в таблицу poisktovara и выводятся в форме.при следующем нажатии на кнопку поиск таблица poisktovara очищается (delete from) и туда записывается новые значения select.