powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с добавлением данных через курсорадаптер
7 сообщений из 57, страница 3 из 3
Помогите с добавлением данных через курсорадаптер
    #39397196
rock-n-roll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

всмысле? вместо
Код: sql
1.
2.
3.
 text to this.SelectCmd noshow textmerge pretext 15
	      SELECT  * from <<this.Tables>> 		
 ENDTEXT


поставить

Код: sql
1.
.SelectCmd='SELECT  * from test'


тогда поведение тоже на поле GROUP ругается
...
Рейтинг: 0 / 0
Помогите с добавлением данных через курсорадаптер
    #39397245
rock-n-roll1. Файлсервер,номер ошибки 10- просто попросил ссылку.К чему весь пафос о не о чем?1. Вам нужна ссылка на нажатие кнопки Alt-F1 в самом фоксе?
2. Сообщение, как уже было указано, надо читать (и сюда постить) полностью, а не отдельные части.
3. Специально для не умеющих пользоваться встроенной справкой цитирую;
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
Visual FoxPro 9.0 
Syntax error (Error 10) Синтаксическая ошибка (Ошибка 10) 


Вы запустили команду, которая синтаксически некорректна. 
Вы могли написать с ошибками команду или имя переменной, или использовали предложение, которое недействительно в текущем контексте. 

Нажмите F1, чтобы посмотреть контекстно-зависимую справку по команде. 


2. Вообще к чему это?Ну так прочитайте и может быть поймете.
Вопрос к другим форумчанам, НЕ К првильный проходящий. Обойдетесь, форум публичный и не вам решать кто будет отвечать.
если в первой строке имя поля заменить на GROUP сразу ругается tableupdate
Да, я подозреваю что он в своих апдейтах воспринимает GROUP за ключевое слово- может и я гоню- вразумитеРугается не кад, а сам фокс при выполнении получившегося синтаксически неправильного update. Синтаксически неправильный он не по вине кад, а по вашей вине в виде использования ключевых слов в качестве идентификаторов.
...
Рейтинг: 0 / 0
Помогите с добавлением данных через курсорадаптер
    #39397299
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rock-n-rollDima T,

всмысле? вместо
Код: sql
1.
2.
3.
 text to this.SelectCmd noshow textmerge pretext 15
	      SELECT  * from <<this.Tables>> 		
 ENDTEXT


поставить

Код: sql
1.
.SelectCmd='SELECT  * from test'


тогда поведение тоже на поле GROUP ругается
В смысле в отдельный PRG или окно Command и там запустить.

Если и там ошибка, то показывай сам запрос, лучше укоротить до такого состояния чтобы можно было повторить твою ошибку.
У меня проблем нет, так работает
Код: sql
1.
2.
create Cursor t (group i)
select group from t where group != 1 group by group order by group



Если проблема где-то в другом месте, то давай пример кода с демонстрацией проблемы, простенький проект сделай, т.к. курсорадаптеры редко использую, поэтому без готового примера не подскажу.
...
Рейтинг: 0 / 0
Помогите с добавлением данных через курсорадаптер
    #39397921
rock-n-roll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
правильный прохождящий.,

правильный прохождящий.Ругается не кад, а сам фокс при выполнении получившегося синтаксически неправильного update. Синтаксически неправильный он не по вине кад, а по вашей вине в виде использования ключевых слов в качестве идентификаторов.
дык всетаки генерирует непраильный update из за ключевого group?, что и предполагалось в самом начале, но хотелось как-то убедиться(хотя я не видел нигде рекомендации не употреблять ключевые слова в качестве идентификаторов, хотя наверно это и не лишнее).

Правда Dima T на что то другое намекает- пока не понятно на что
правильный прохождящий..1. Вам нужна ссылка на нажатие кнопки Alt-F1 в самом фоксе?
2. Сообщение, как уже было указано, надо читать (и сюда постить) полностью, а не отдельные части.
3. Специально для не умеющих пользоваться встроенной справкой цитирую;
Да наверно я здесь подгоняю, кроме как "синтаксическая ошибка" ждать большего не приходится
Просто если "обычные" ошибки у себя еще находишь по средствам MESSAGE+LINENO+ASTACKINFO(и "видишь глазами" впоследствии),
то здесь кроме aerror ничего нет. Есть ли какая ссылка о том как и из чего tableupdate генерирует свои команды обновления, или увидеть глазами(в идеале) или "метод" по которому я составлю для себя(и опять же увижу глазами)
Да повторяюсь-Синтаксическая ошибка- не о чем, какие еще подводные камни могут быть.

правильный прохождящий.Ну так прочитайте и может быть поймете.
А давайте вместе
Код: sql
1.
Возвращает числовое значение, показывающее, редактировалось ли поле в таблице или курсоре, добавлялись ли записи, изменился ли для текущей записи статус удаления.


И что?Я знаю что я "обновляю", я update не вижу
Или может вы намекаете на то что - если имена полей "стремные" использовать какой -нибудь другой подход буферизации или еще чего?
Слишком туманно.
правильный прохождящий.Обойдетесь, форум публичный и не вам решать кто будет отвечать.
Просто все что было сказано, кроме последней фразы в полледнем топе- слишком загадочно(скажем чтоб помягче) А за последнее спасибо- если это утверждение
И тем немение хотелось бы убедиться и иметь "инструментарий" определения причины возникновения подобных проблем быстро и самостоятельно.
...
Рейтинг: 0 / 0
Помогите с добавлением данных через курсорадаптер
    #39397924
rock-n-roll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Dima Trock-n-rollDima T,

всмысле? вместо
Код: sql
1.
2.
3.
 text to this.SelectCmd noshow textmerge pretext 15
	      SELECT  * from <<this.Tables>> 		
 ENDTEXT


поставить

Код: sql
1.
.SelectCmd='SELECT  * from test'


тогда поведение тоже на поле GROUP ругается
В смысле в отдельный PRG или окно Command и там запустить.

Если и там ошибка, то показывай сам запрос, лучше укоротить до такого состояния чтобы можно было повторить твою ошибку.
У меня проблем нет, так работает
Код: sql
1.
2.
create Cursor t (group i)
select group from t where group != 1 group by group order by group


.
проблема не в SelectCmd - кад "собирает" без проблем в том числе и с полем group.Проблема в tableupdate- хочется узнать о нем подробней- "как и из чего" он генерирует свои команды на обновление

Dima TЕсли проблема где-то в другом месте, то давай пример кода с демонстрацией проблемы, простенький проект сделай, т.к. курсорадаптеры редко использую, поэтому без готового примера не подскажу.

пример был чуть выше
...
Рейтинг: 0 / 0
Помогите с добавлением данных через курсорадаптер
    #39398612
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, я, конечно, понимаю, что то, что я писал несколько лет назад в этой теме

http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=865794&msg=10984162

это про вставку. А здесь-то речь про обновление. Это, конечно, совсем другое дело! Буквально ничего общего!

Хорошо, тогда так. У класса CursorAdapter есть такое событие, называется CursorAdapter.BeforeUpdate(). Одним из его входных параметров является параметр cUpdateInsertCmd. По сути, это та команда, которая будет сформирована на исполнение для обновления таблицы-источника. Вот и посмотрите, какая именно команда будет сформирована (посмотрите содержимое этого параметра) и насколько она синтаксически корректна.

В принципе, ничто не мешает скорректировать содержимое этого параметра и через DoDefault() выполнить уже измененную команду.

На всякий случай, даю подсказку куда смотреть и как исправить. Если имя поля указано без префикса в виде имени таблицы, то возможна неоднозначная интерпретация этого имени при синтаксическом разборе команды компилятором
...
Рейтинг: 0 / 0
Помогите с добавлением данных через курсорадаптер
    #39399214
rock-n-roll
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМНу, я, конечно, понимаю, что то, что я писал несколько лет назад в этой теме

http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=865794&msg=10984162

это про вставку. А здесь-то речь про обновление. Это, конечно, совсем другое дело! Буквально ничего общего!

Хорошо, тогда так. У класса CursorAdapter есть такое событие, называется CursorAdapter.BeforeUpdate(). Одним из его входных параметров является параметр cUpdateInsertCmd. По сути, это та команда, которая будет сформирована на исполнение для обновления таблицы-источника. Вот и посмотрите, какая именно команда будет сформирована (посмотрите содержимое этого параметра) и насколько она синтаксически корректна.

В принципе, ничто не мешает скорректировать содержимое этого параметра и через DoDefault() выполнить уже измененную команду.

На всякий случай, даю подсказку куда смотреть и как исправить. Если имя поля указано без префикса в виде имени таблицы, то возможна неоднозначная интерпретация этого имени при синтаксическом разборе команды компилятором
Ну когда ткнули носом в тетрадку-понятно , до этого никак
Спасибо- то что хотел увидеть и услышать, действительно, нет там никаких префиксов
Те мне нужно их проставить тупо "все для всех полей" как здесь
Код: 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.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
is_up=.t.&&&.t.- &#228;&#238;&#225;&#224;&#226;&#235;&#255;&#229;&#236; &#239;&#229;&#240;&#244;&#232;&#234;&#235;&#251; &#228;&#235;&#255; group,set,wher f- &#234;&#224;&#234; &#229;&#241;&#242;&#252;
CREATE TABLE C:\log (fname c(6),is_ok l,UpdCmd C(60),WorkCmd C(60))
CREATE TABLE C:\Testf (fild c(6))
INSERT INTO Testf(fild)value('select')
INSERT INTO Testf(fild)value('group')
INSERT INTO Testf(fild)value('update')
INSERT INTO Testf(fild)value('set')
INSERT INTO Testf(fild)value('delete')
INSERT INTO Testf(fild)value('where')
SCAN 
   field1=ALLTRIM(Testf.fild)
   CREATE TABLE C:\test (id i,&field1 i)
   INSERT INTO test(id,&field1)value(1,1)   
   xxx=CREATEOBJECT('mcad','test','id',is_up)
   SELECT (xxx.alias)
   REPLACE &field1 WITH 2
   xxx.save()
   SELECT Testf
ENDSCAN
SELECT log
BROWSE FOR !is_ok 
BROWSE FOR is_ok  
******************
define class mcad as CursorAdapter
BufferModeOverride =5
DataSourceType ='Native'
PROCEDURE Init
PARAMETERS cTable,cKey,lIs
WITH this
    .alias=SYS(2015)
    .tables=ALLTRIM(cTable)
    .keyfieldlist=cKey
    .AddProperty('lpIs',lIs)    
    .AddProperty('array_fields[256,18]')
    select (.tables)
    gnFieldcount = AFIELDS(.array_fields)  && &#241;&#238;&#231;&#228;&#224;&#229;&#242;&#241;&#255; &#236;&#224;&#241;&#241;&#232;&#226;.
    .updatableFieldList=.array_fields(1,1)
    FOR nCount = 2 TO gnFieldcount 
       .updatableFieldList=.updatableFieldList+','+.array_fields(nCount,1) 
    NEXT     .
    
    .updateNameList=GETWORDNUM(.updatableFieldList,1,",")+' '+.tables+'.'+GETWORDNUM(.updatableFieldList,1,",")
     FOR i=2 TO  GetWordCount(.updatableFieldList, ",")
        .updateNameList=.updateNameList+','+GETWORDNUM(.updatableFieldList,i,",") +' '+ .tables+'.'+GETWORDNUM(.updatableFieldList,i,",") 
     NEXT

     text to this.SelectCmd noshow textmerge pretext 15
	      SELECT  * from <<this.Tables>> 		
     ENDTEXT
    .addproperty('cUpdCmd','')
    .addproperty('cUpdCmd2','')
    .addproperty('ProblemFilds(3)') 
    IF .lpIs
    .ProblemFilds(1)='GROUP'
    .ProblemFilds(2)='SET'
    .ProblemFilds(3)='WHERE'
    ENDIF 
    RETURN .cursorfill()

ENDWITH
ENDPROC 
************
PROCEDURE save
IF !tableupdate(.T.,.T.,this.alias)
	INSERT INTO LOG (fname,is_ok,UpdCmd,WorkCmd)value(this.array_fields(2,1),.f.,this.cUpdCmd,this.cUpdCmd2)
ELSE
	INSERT INTO LOG (fname,is_ok,UpdCmd,WorkCmd)value(this.array_fields(2,1),.t.,this.cUpdCmd,this.cUpdCmd2)	
ENDIF
ENDPROC  
PROCEDURE BeforeUpdate
LPARAMETERS cFldState, lForce, nUpdateType, cUpdateInsertCmd, cDeleteCmd
this.cUpdCmd =cUpdateInsertCmd
IF this.lpIs
LOCAL cStrtranFrom,cStrtranTo
FOR i=1 TO 3
    cStrtranFrom=' '+this.ProblemFilds(i)+'='
    cStrtranTo=' '+this.tables+'.'+this.ProblemFilds(i)+'='
    cUpdateInsertCmd=STRTRAN(cUpdateInsertCmd,cStrtranFrom,cStrtranTo)
NEXT  
ENDIF 
this.cUpdCmd2 =cUpdateInsertCmd
dodefault(cFldState, lForce, nUpdateType, cUpdateInsertCmd, cDeleteCmd)
ENDPROC  

ENDDEFINE


Хотя упорно чешется вопрос:"А что эти разработчики сами не могли проставить?Тупо все для всех?Может существует какая опция об этом, просто ее редко пользуют-поэтому все забыли?"

Вобщем спасибо, Вопрос снят
...
Рейтинг: 0 / 0
7 сообщений из 57, страница 3 из 3
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите с добавлением данных через курсорадаптер
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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