|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
Создал класс CursorAdapter и на его основе создаю несколько курсоров в Data Environment формы из таблиц на MySQL, используя драйвер ОDВС. Все работает красиво – добавляется редактируется кроме полей (date). Через append blank и repl или через insert-вставляет, но потом поля(date) не редактируются даже после пересоздания курсоров. Для отладки в свойстве AfterInsert использую такой код: =messagebox(STR(CURSORGETPROP("Buffering"))+' buff',16,'в AfterInsert!') =messagebox(tableupdate(1,.t.,'kart_reg'),16,'в AfterInsert!') IF TableUpdate(.T.,.T.,"kart_reg")=.F. LOCAL laError(1) =AERROR(laError) * Анализ массива laError для уточнения причины ошибки ENDIF В массиве laError нахожу Error(2077) Объекта CursorAdapter в данный момент времени уже используется в другом процессе или, иными словами, не может быть вызван в этот момент времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2012, 16:07 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
ODBC отстой переходи на soap ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2012, 12:34 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
Если все поля редактируются и проблема только в одном поле, то, скорее всего, Вы просто не включили это поле в список полей для обновления. Проверьте факт включения этого поля в список полей в свойствах UpdatableFieldList - изменения в каких полях будут передаваться на сервер UpdateNameList - пары соответствия поля CursorAdapter и поля таблицы MySQL Кроме того, не знаю, существует ли в MySQL тип поля date (без фрагмента со временем). Если "нет" и Вы используете свойство CursorSchema для конвертации DateTime на стороне MySQL в Date на стороне FoxPro, то надо не забыть включить использование настроенной схемы через свойство UseCursorSchema = .T. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2012, 16:36 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
Благодарю за помощь! Проверил еще все раз. Пока все по прежнему. Может как то сказываетя использование одного базовый СА при создании нескольких разных курсоров? А это основной: this.NEWOBJECT('kart_reg', 'sqlCursor', 'mylib') this.kart_reg.alias = 'kart_reg' this.kart_reg.tables = 'kart_reg' this.kart_reg.KeyFieldList = 'n_kart' this.kart_reg.FetchSize = -1 this.kart_reg.FetchAsNeeded = .F. this.kart_reg.UseCursorSchema = .T. !!! В базовом курсоре - .F. this.kart_reg.CursorSchema = 'N_KART N(4), KSP C(6), DAT_PODACH D(8), NAME_KART C(220), FIO_DIR C(60),DOLJ_DIR C(12), TELEF C(50),FIO_ISPOL C(20), DAT_DORAB D(8), '+; 'OSNOV_DORA C(1), DAT_DOG D(8), NOM_DOGWR C(6), DAT_VOZOBN D(8),IND N(6),GOROD C(5),AB C(2),STREET C(5),DOM C(5),KORPUS C(5),KVART C(5),PR_KART C(1),PRI C(220), '+; 'ADRES C(100), d1 L, d2 L, d3 L, d4 L, d5 L, d6 L, d7 L, d8 L, d9 L, d10 L, d11 L,kod_pol C(2),end1 L, end2 L, end3 L' this.kart_reg.SelectCmd = 'select * from kart_reg'__ this.kart_reg.UpdatableFieldList = 'N_KART, KSP, DAT_PODACH, NAME_KART, FIO_DIR,DOLJ_DIR, TELEF,FIO_ISPOL, DAT_DORAB, OSNOV_DORA, DAT_DOG, NOM_DOGWR, DAT_VOZOBN,'+; 'IND,GOROD,AB,STREET,DOM,KORPUS,KVART,PR_KART,PRI, ADRES, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11,kod_pol,end1, end2, end3' this.kart_reg.UpdateNameList = 'N_KART KART_REG.N_KART, KSP KART_REG.KSP, DAT_PODACH KART_REG.DAT_PODACH,NAME_KART KART_REG.NAME_KART,'+; 'FIO_DIR KART_REG.FIO_DIR,DOLJ_DIR KART_REG.DOLJ_DIR, TELEF KART_REG.TELEF,FIO_ISPOL KART_REG.FIO_ISPOL, DAT_DORAB KART_REG.DAT_DORAB, OSNOV_DORA KART_REG.OSNOV_DORA,'+; 'DAT_DOG kart_reg.dat_dog, NOM_DOGWR kart_reg.nom_dogwr,DAT_VOZOBN kart_reg.dat_vozobn,IND kart_reg.ind,GOROD kart_reg.gorod,AB kart_reg.ab,'+; 'STREET kart_reg.street,DOM kart_reg.dom,KORPUS kart_reg.korpus,KVART kart_reg.kvart,PR_KART kart_reg.pr_kart,PRI kart_reg.pri,ADRES kart_reg.adres,D1 kart_reg.d1,'+; 'D2 kart_reg.d2,D3 kart_reg.d3,D4 kart_reg.d4,D5 kart_reg.d5,D6 kart_reg.d6,D7 kart_reg.d7,D8 kart_reg.d8,D9 kart_reg.d9,D10 kart_reg.d10,D11 kart_reg.d11,'+; 'KOD_POL kart_reg.kod_pol, END1 kart_reg.end1, END2 kart_reg.end2, END3 kart_reg.end3' this.kart_reg.cursorfill() ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2012, 13:20 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
VIVA_CA, у вас неправильно описана CursorSchema: в полях типа Date длина поля не указывается. Попробуйте так: Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2012, 14:24 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
Благодарю – исправил На форме с выше с вышеописанном СА при добавлении записи: LOCAL n zap_add=1 &&признак добавления записи thisform.pageframe1.page1.SetAll("ReadOnly", .f.) thisform.pageframe1.page1.SetAll("Enabled",.t., "Tscombobox") sele kart_reg n=0 * Найти максимальный код типа счетчика calc max(n_kart) to n n=n+1 *DODEFAULT() insert into kart_reg (n_kart,dat_podach) values (n,date()) *APPEND blank * REPLACE kart_reg.n_kart WITH n, kart_reg.dat_podach WITH date(), nzap=recno() goto nzap thisform.pageframe1.page1.tst_nom.setfocus thisform.pageframe1.page1.refresh выдает: Connectivity error ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2012, 15:48 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
dmitryxVIVA_CA, у вас неправильно описана CursorSchema: в полях типа Date длина поля не указывается. Это без разницы. Для полей длина которых фиксирована и не может быть изменена, указанное пользователем значение просто игнорируется. Код: sql 1. 2. 3. 4.
Тем более, что поле типа Date в FoxPro действительно занимает 8 байт ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2012, 17:03 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
1. Не лезьте пока в методы AfterInsert. Он не для этого. Удалите в нем весь свой код. 2. Попробуйте вместо Код: sql 1.
явным образом перечислить все поля. Возможно, порядок следования полей в таблице на MySQL отличается от того порядка, который Вы предполагаете. Перечисление должно идти в том порядке, как поля указаны в CursorSchema Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2012, 17:12 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
!!! Благодарю! Проверю после выходных. Проэкт остался на работе Я из Гомеля - ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2012, 17:36 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
VIVA_CAСоздал класс CursorAdapter и на его основе создаю несколько курсоров в Data Environment Характер приведенных сообщений об ошибках наводит на мысль о конфликте нескольких экземпляров класса СА при использовании общего ODBC соединения. Лучше создавать курсорадаптеры не в DE, а программно - в LOAD формы. Прослойка в виде Data Environment только порождает проблемы, без нее курсорадаптеры становятся более "управляемыми". По поводу передачи полей типа DATE из FoxPro в MySQL и обратно - ошибка возникает только при попытке передать "пустую" дату из Foxpro - ее нужно заменять на NULL. В остальных случаях проблем не возникает. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2012, 19:52 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
! Благодарю всех за направления к действию!!! Пробую по возможности все варианты. В MySQL - есть тип поля date – по умолчанию заношу “0000-00-00”, пробовал ничего не заносить. Почистил свойство AfterInsert – убрал все и TableUpdate В select перечислил поля как в схеме. Сообщение при добавлении записи “Connectivity error “ не выскакивает. Явной ошибки при попытке передать "пустую" дату из Foxpro на MySQL не наблюдаю. Все пока вернулось на исходную позицию – т.е. поля Date на MySQL не обновляютя как пустые так и первоначвльно добавленные Insert-ом. Может есть у кого пример программного создания СА - в LOAD формы с датой и как формат описан на MySQL? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2012, 12:04 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
Вот простенький фрагмент из LOAD формы. Все вводится и кооректируется. Код: javascript 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2012, 15:44 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
Спасибо! Перепишу все по новой согласно Вашему примеру и еще ? Что происходит если ключевое поле KeyFieldList = "IDZ" будет присутствовать в UpdatableFieldList и в UpdateNameList и какой формат полей IDZ, DATAPR, DATAUV у Вас на MySQL ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2012, 16:27 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
IDZ - это первичный ключ записи, тип INTEGER c автоинкрементом, поэтому его нельзя изменять при UPDATE и передавать при INSERT. DATAPR, DATAUV - типа DATE Под "пустой" датой я имел ввиду фоксовскую дату из пробелов - {" . . "} - в этом случае возникает ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.07.2012, 17:07 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
Хорошая штука СА - очень хочется разобраться до конца! Ввел дополнительное поле IDZ на MySQL (по образцу). IDZ - это первичный ключ записи, тип INTEGER c автоинкрементом. До IDZ не дотрагиваюсь т. е. сам не корректирую . Если this.kart_reg.KeyFieldList = 'IDZ' -запись добавляетя а потом ничего не корректируется. Учел почти все советы, проверил названия и последовательность полей. Если this.kart_reg.KeyFieldList = 'n_kart' остается как было т.е. запись добавляетя и корректируется кроме дат. Поле n_kart на MySQL обычное поле INTYEGER не первичный ключ и не c автоинкрементом(исходный вариант). Может что – то в связке KeyFieldList – CursorSchema – UpdatableFieldList – UpdateNameList и формата и назначения поля на MySQL(или головой)? this.NEWOBJECT('kart_reg', 'sqlCursor', 'mylib') this.kart_reg.DataSource = gn_Soed * this.kart_reg.flags=0 !!!!!! в созданном построителем КЛССЕ "sqlCursor" стоит 0 и ругается если пытаюсь так изменить this.kart_reg.alias = 'kart_reg' this.kart_reg.tables = 'kart_reg' *** this.kart_reg.KeyFieldList = 'n_kart' this.kart_reg.KeyFieldList = 'idz' this.kart_reg.whereType = 3 this.kart_reg.FetchSize = -1 this.kart_reg.FetchAsNeeded = .F. this.kart_reg.UseCursorSchema = .T. this.kart_reg.SelectCmd = 'select ' +; 'N_KART, KSP, DAT_PODACH, NAME_KART, FIO_DIR, DOLJ_DIR, TELEF, FIO_ISPOL, DAT_DORAB, ' + ; 'OSNOV_DORA, DAT_DOG, NOM_DOGWR, DAT_VOZOBN,IND, GOROD, AB, STREET, DOM, KORPUS, KVART, PR_KART, PRI, ' + ; 'ADRES, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, kod_pol, end1, end2, end3, idz ' + ; 'from kart_reg' this.kart_reg.CursorSchema = 'N_KART N(4), KSP C(6), DAT_PODACH D, NAME_KART C(220), FIO_DIR C(60), DOLJ_DIR C(12), '+; 'TELEF C(50), FIO_ISPOL C(20), DAT_DORAB D, OSNOV_DORA C(1), DAT_DOG D, NOM_DOGWR C(6), DAT_VOZOBN D, IND N(6), '+; 'GOROD C(5), AB C(2), STREET C(5), DOM C(5), KORPUS C(5), KVART C(5), PR_KART C(1), PRI C(220), '+; 'ADRES C(100), d1 L, d2 L, d3 L, d4 L, d5 L, d6 L, d7 L, d8 L, d9 L, d10 L, d11 L, kod_pol C(2),end1 L, end2 L, end3 L, idz i(10)' this.kart_reg.UpdatableFieldList = 'N_KART, KSP, DAT_PODACH, NAME_KART, FIO_DIR,DOLJ_DIR, TELEF,FIO_ISPOL, DAT_DORAB, OSNOV_DORA, DAT_DOG, NOM_DOGWR, DAT_VOZOBN,'+; 'IND,GOROD,AB,STREET,DOM,KORPUS,KVART,PR_KART,PRI, ADRES, d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11,kod_pol,end1, end2, end3, idz' this.kart_reg.UpdateNameList = 'N_KART KART_REG.N_KART, KSP KART_REG.KSP, DAT_PODACH KART_REG.DAT_PODACH,NAME_KART KART_REG.NAME_KART,'+; 'FIO_DIR KART_REG.FIO_DIR,DOLJ_DIR KART_REG.DOLJ_DIR, TELEF KART_REG.TELEF,FIO_ISPOL KART_REG.FIO_ISPOL, DAT_DORAB KART_REG.DAT_DORAB, OSNOV_DORA KART_REG.OSNOV_DORA,'+; 'DAT_DOG kart_reg.dat_dog, NOM_DOGWR kart_reg.nom_dogwr,DAT_VOZOBN kart_reg.dat_vozobn,IND kart_reg.ind,GOROD kart_reg.gorod,AB kart_reg.ab,'+; 'STREET kart_reg.street,DOM kart_reg.dom,KORPUS kart_reg.korpus,KVART kart_reg.kvart,PR_KART kart_reg.pr_kart,PRI kart_reg.pri,ADRES kart_reg.adres,D1 kart_reg.d1,'+; 'D2 kart_reg.d2,D3 kart_reg.d3,D4 kart_reg.d4,D5 kart_reg.d5,D6 kart_reg.d6,D7 kart_reg.d7,D8 kart_reg.d8,D9 kart_reg.d9,D10 kart_reg.d10,D11 kart_reg.d11,'+; 'KOD_POL kart_reg.kod_pol, END1 kart_reg.end1, END2 kart_reg.end2, END3 kart_reg.end3, IDZ kart_reg.idz' If !this.kart_reg.cursorfill(.T.,.F.) m1=Aerror(mm1) =MESSAGEBOX(mm1[2],16,"Ошибка при заполнении курсора") RETURN .f. Endif ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2012, 10:40 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
Пытался смоделировать такую ошибку - но безуспешно. Пробовал менять формат даты, SET CENTURY, значения WhereType - все корректируется и передается правильно. Попробуйте вручную прописать для СА запрос в UpdateCMD, а в событие AfterUpdate поставьте AERROR(... - чтобы отловить ошибку. Кстати, какая у Вас версия сервера MySQL и драйвера ODBC (надеюсь, не древняя)? У меня сейчас стоит драйвер версии 3.51.27 (хотя и в ветке 5.1 таких проблем нет), а сервер 5.5.8 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2012, 14:31 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
MySQL ODBC 3.51 Driver Server 5.1 Если не затруднит - что прописать в UpdateCMD для СА? И какой вариант мне все же добивать с this.kart_reg.KeyFieldList = 'n_kart' или this.kart_reg.KeyFieldList = 'idz' как у Вас -вернее какой по теории более правильный Пытался не использовать KeyFieldList - ругается - и по моему правильно делает Благодарю!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2012, 16:54 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
VIVA_CA, В UpdateCmd записывается обычный SQL - запрос UPDATE, передающий изменения из курсора на сервер. Обычно CA сам автоматически строит такие запросы, но в сложных случаях - например, при необходимости поменять тип полей - можно прописать запрос в UpdateCmd. Что-то типа: Код: vbnet 1. 2.
Но сначала попробуйте проверить, что выдаст AERROR в AfterUpdate -без AERROR никаких сообщений об ошибке может не выдаваться, даже если запрос Update на сервере вылетел с ошибкой. В KeyFieldList заносится список ключевых полей, по которым запросы UPDATE выполняют поиск изменяемых записей. Лучший вариант - когда там записано единственное поле - первичный ключ. Содержимое KeyFieldList используется для построения секции WHERE запросов UPDATE. Если таблица не имеет первичного ключа (что не есть хорошо), можно использовать другие поля, по которым в таблице построены индексы. Использование не индексированных полей приведет к построению не оптимизируемых запросов и к тормозам. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.07.2012, 23:49 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
Благодарю – за терпение !!! Текучка не дает сосредоточиться. 1)Вот что у меня показывает DEGUG в параметрах передаваемых в AfterUpdate Cfldstate - ‘111111111112111111…..’ Lforce - .F. Nupdatetype – 1 А эта команда сформировалась при корректировке поля dat_dog и не анализирует .NULL. Cupdateinsertcmd -Update kart_reg set dat_dog= ?kart_reg.dat_dog where n_kart =?oldval(‘nkart’,’kart_reg’) and dat_dog=?oldval(‘dat_dog’,’kart_reg’) lresult - .T. и =AERROR(laerror) выдал laerror[1] = .F. laerror[2] = .F. laerror[3] = .F. 2)А если на MySQL в поле dat_dog отмечаю ALLOW NULL и при добавлении записи: APPEND blank REPLACE … kart_reg.dat_dog WITH .null. - то в дальнейшем дата корректируетя (но в пустых в полях – настараживает пользователя NULL) А как у вас дата прописана на MySQL 3) Пытаюсь по Вашему образцу в LOAD формы создать СА(Соединение создается раньше) SET CENTURY ON SET date GERMAN This.ca1=CREATEOBJECT("CursorAdapter") !!! Выдает Property CA1 is not found Где у Вас прописано это свойство? IF TYPE("this.ca1")= "0" WITH This.ca1 .DataSource = gn_Soed !!! Соединение создается раньше .alias = 'kart_reg' .tables = 'kart_reg' .KeyFieldList = 'n_kart' .whereType = 3 .FetchSize = -1 .FetchAsNeeded = .F. .UseCursorSchema = .T. … ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2012, 12:44 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
Ситуация прояснилась. Даты (пустые) не корректировались, во первых, из-за того, что FoxPro и MySQL по разному понимают "пустую" дату, а во вторых, у Вас стоит WhereType = 3 (старое значение даты участвует в выражении Where и сервер из-за этого не находит корректируемую запись). Ошибки при этом не возникает, но и запись не изменяется. Значение .NULL. в этом случае обрабатывается нормально. Хотя, чтобы не смущать приходится пользователей, приходится в SelectCmd вставлять преобразование: iif(isnull(datex),ctod(' . . '),datex), а в UpdateCmd и InsertCmd - обратное преобразование. 3) This.Ca1 - свойство формы нужно создать вручную. Я использую "комбинированную" технологию создания курсор-адаптеров. Сначала создаю их штатным билдером в DE, делаю привязку к элементам формы - избавляю себя от рутинной работы. Затем запускаю небольшую утилиту, которая формирует программное (текстовое) описание всех CA формы и записывает его в буфер обмена. Остается вставить его в LOAD формы и удалить курсоры из DE. Затем "допиливаю" CA, чтобы учитывались все нюансы. Прилагаю эту утилиту, может окажется полезной. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2012, 14:45 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
Огромное спасибо - дякую!!! Обязательно разберусь с Вашим примером. Я многое почерпнул за это время общения. Поджимает время с проектом. А что посоветуете пока в моем случае с WhereType = 3? SelectCmd –подкорректирую согласно Вашей подсказке. UpdateCmd не хотелось бы отслеживать в ручном режиме – он сам как, я понял отслеживает корректируемые поля(но этот NULL?!!!) И хочется повториться - как у вас поле дата прописано на MySQL т. е. что в DEFAULT и ALLOW NULL. С уважением и благодарностью. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2012, 17:31 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
Для полей типа DATE значение по дефолту лучше использовать NULL (и ALLOW NULL, естественно) - это значение Фокс и MySQL понимают одинаково. Тогда все будет работать и при WhereType = 3. Если заменять NULL на более привычное пользователю значение, то преобразовывать придется как при чтении, так и при записи (обновлении) - СА этого не делает. По поводу значения WhereType. Наиболее быстрый вариант - WhereType = 1, когда поиск записей выполняется по первичному ключу. Но этот вариант не применим в ситуации, когда корректируемое поле может быть изменено другим пользователем (например, если корректируемое поле - остаток товара на складе при оформлении заказов). В этом случае при WhereType = 3 Update не произойдет и пользователь будет поставлен в известность об изменившейся ситуации. Хотя, в сложных случаях проще будет использовать сквозные запросы. СA - это не панецея, а способ сокращения рутинной работы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2012, 22:48 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
Наконец все стало на свои места! – Основная проблема решена. Боюсь утомить, но хотелось бы узнать Ваше мнение – по каким причинам не рекомендуют использовать среду DE? (на сайтах просто не рекомендуют использовать) и еще - как обмануть DE не закрывать CA при закрытии формы – AutoCloseTables c CA не срабатывает (хотя уже перевожу все в LOAD формы) и почему , если использовать KeyFieldList = 'n_kart' и это поле на MySQL - не первичный ключ и если есть несколько записей с одинаковыми значениями в n_kart и dat_dog то при корректировке одного значения поля dat_dog -значение на MySQL меняется на всех этих записях. Иногда при добавлении записи добавляетя 2 или даже больше(подозреваю что при не удачной попытке обновления не очищается буфер – как с этим бороться?) Спасибо!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2012, 10:19 |
|
CursorAdapter не обновляет поля(date) на MySQL- Прошу помочь
|
|||
---|---|---|---|
#18+
по каким причинам не рекомендуют использовать среду DE? Если нужно сделать быстро - используйте DE, если профессионально - описывайте все программно. Например, в серьезном проекте нельзя написать просто USE TABLE_X ... , а нужно хотя бы заключить эту команду в TRY ... CATCH ... ENDTRY и обработать возможные сбойные ситуации. Может возникнуть необходимость работать с несколькими базами данных и переключаться между ними в процессе работы. Открытие и закрытие таблиц без DE более гибко, дает возможность выполнить все необходимые проверки, а DE обеспечивает только базовый функционал. как обмануть DE не закрывать CA при закрытии формы В этом случае (ясли я правильно Вас понял) нужно и открывать его не в этой форме, а в главной форме (программе) проекта. Иначе при DESTROY формы будет уничтожена переменная (свойство формы) - ссылка на объект СА и он тоже будет уничтожен. СА, созданные программно, нужно закрывать при закрытии формы - как обычные курсоры. Предварительно стоить выполнить TABLEUPDATE c проверкой ее кода завершения и с обработкой исключений - иначе USE может вылететь с ошибкой. и почему , если использовать KeyFieldList = 'n_kart' и это поле на MySQL - не первичный ключ и если есть несколько записей с одинаковыми значениями в n_kart и dat_dog то при корректировке одного значения поля dat_dog -значение на MySQL меняется на всех этих записях. Это нормальный результат работы запроса UPDATE - изменять все записи в таблице, соответствующие условиям, описанным в секции WHERE. Если нужно изменить какую-то отдельную запись с не уникальным значением 'n_kart' - в поле KeyFieldList нужно записать такую комбинацию полей, которая позволит однозначно определить нужную запись. А лучше использовать уникальный первичный ключ, например, поле с автоинкрементом. Возьмите себе за правило всегда создавать в таблице первичный ключ - и Вы избавитесь от многих проблем. Иногда при добавлении записи добавляетя 2 или даже больше Чтобы такого не происходило нужно проверять завершение команды INSERT - в событии AFTERINSERT и обрабатывать возникающие ошибки. При работе с SQL - сервером могут происходить многие непредвиденные ситуации - сбой в сети, обрыв соединения, перегрузка сервера и т.п. Поэтому главный принцип - проверяй завершение каждого шага. Желаю успехов ! ... |
|||
:
Нравится:
Не нравится:
|
|||
11.07.2012, 14:59 |
|
|
start [/forum/topic.php?fid=41&msg=37869855&tid=1583570]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 253ms |
total: | 396ms |
0 / 0 |