Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / cursoradapter duplicate key / 19 сообщений из 19, страница 1 из 1
03.10.2008, 15:58
    #35575305
vtanya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursoradapter duplicate key
Бьюсь какой день, на работе никто не может помочь.
Помогите!!!!
Объявлен cursoradapter. на MSSQL 2000 есть таблица ,которую нужно обновить, ключ UNIQUE
kod,data,nplt,priz

lo_cao=CREATEOBJECT("CursorAdapter")
lo_cao.alias="platto"
lo_cao.DataSourceType="ODBC"
lo_cao.DataSource=handle
lo_cao.SelectCmd="EXEC Vplato ?km,?vgd"
lo_cao.Tables="plato"
lo_cao.KeyFieldList="kod,nplt,data,priz"
Lo_cao.UpdateNameList="kod plato.kod,nplt plato.nplt,;
Data plato.Data,summa plato.summa,naim plato.naim,;
priz plato.priz,user1 plato.user1,raion plato.raion,;
mes plato.mes,god plato.god"
lo_cao.updatetype=1
lo_cao.updatableFieldList="kod,nplt,data,summa,;
naim,priz,user1,raion,mes,god"

lo_cao.CursorFill()
lo_cao.BufferModeOverride=5

когда запись вставляется один раз, то проходит,
при повторном запросе, когда меняется только сумма
выдается сообщение

duplicate key на VS SQL2000

SELECT platto
SEEK STR(kll,8)+STR(jj,6)+DTOC(dd)+jj2
IF .not. FOUND()
APPEND BLANK
ENDIF
REPLACE kod WITH kll, priz WITH jj2, data WITH dd, nplt WITH jj
REPLACE naim WITH vnaim,summa WITH sw + summa,raion WITH vraion

Таблица должна редактироваться? Правильно я понимаю?
...
Рейтинг: 0 / 0
03.10.2008, 16:16
    #35575372
12345зайчик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursoradapter duplicate key
авторlo_cao.KeyFieldList="kod,nplt,data,priz"

бред

оставьте только первичный ключь
...
Рейтинг: 0 / 0
03.10.2008, 16:20
    #35575388
12345зайчик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursoradapter duplicate key
Lo_cao.UpdateNameList="kod plato.kod,nplt plato.nplt,;
Data plato.Data,summa plato.summa,naim plato.naim,;
priz plato.priz,user1 plato.user1,raion plato.raion,;
mes plato.mes,god plato.god"

точка с запятой на кой в конце строк?

Код: plaintext
1.
2.
3.
4.
5.
6.
text to Lo_cao.UpdateNameList noshow pretext  15 
   kod plato.kod,nplt plato.nplt,
   Data plato.Data,summa plato.summa,naim plato.naim,
   priz plato.priz,user1 plato.user1,raion plato.raion,
   mes plato.mes,god plato.god
endtext
...
Рейтинг: 0 / 0
03.10.2008, 16:23
    #35575398
12345зайчик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursoradapter duplicate key
авторвыдается сообщение

когда?

ош-ки Вы должны начать выидеть
в момент того, как записи начнут посылаться на сервер
(команда tableupdate)

одновременно
смотрите профайлером, что на сервере выполняется
...
Рейтинг: 0 / 0
03.10.2008, 16:35
    #35575435
12345зайчик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursoradapter duplicate key
vtanya

Танечка, не плачь - не получается, - нарисуй мне сюда create таблички и индексов
+ напиши какие записи всунуть

я нарисую код под Вашу проблему
...
Рейтинг: 0 / 0
03.10.2008, 16:42
    #35575452
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursoradapter duplicate key
vtanya
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT platto
SEEK STR(kll, 8 )+STR(jj, 6 )+DTOC(dd)+jj2
IF .not. FOUND()
	APPEND BLANK
ENDIF
REPLACE kod WITH kll, priz WITH jj2, data WITH dd, nplt WITH jj  
REPLACE naim WITH vnaim,summa WITH sw + summa,raion WITH vraion

Для начала, уберите модификацию ключевых полей внутрь IF..ENDIF, ведь если запись с такими ключами найдена, то нет смысла их редактировать

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
SELECT platto
SEEK STR(kll, 8 )+STR(jj, 6 )+DTOC(dd)+jj2
IF .not. FOUND()
	APPEND BLANK
	REPLACE kod WITH kll, priz WITH jj2, data WITH dd, nplt WITH jj  
ENDIF
REPLACE naim WITH vnaim,summa WITH sw + summa,raion WITH vraion

Кроме того, а какой индекс Вы построили по курсору? Вот этот самый SEEK() Вы выполняете по какому индексу? Можно увидеть его код создания? Вы уверены, что этот индекс найдет ранее введенное значение? В самом курсоре, еще ДО сброса по TableUpdate() не создается этот самый дубль?

На всякий случай напомню, что индекс типа UNIQUE в FoxPro не запрещает создание дублей. Но отображает только первый попавшийся. Это своеобразный фильтр, наложенный на таблицу. Запрещает создавать дубли индекс типа CANDIDAT.
...
Рейтинг: 0 / 0
03.10.2008, 17:45
    #35575613
12345зайчик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursoradapter duplicate key
авторТаблица должна редактироваться? Правильно я понимаю?
я так понимаю, проблема с редактированием
серверной стороны и добавлением записей в серверную таблицу

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

смешали в кучу сервер, клиента ...,
что редактируем, куда ...
...
Рейтинг: 0 / 0
06.10.2008, 09:45
    #35577296
vtanya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursoradapter duplicate key
Переставила строки с ключевыми параметрами, тот же эффект.
Сваливается на MS SQL.
Создание базы прикладываю
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[plato]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[plato]
GO

CREATE TABLE [dbo].[plato] (
[kod] [numeric](8, 0) NOT NULL ,
[nplt] [numeric](6, 0) NULL ,
[priz] [char] (6) COLLATE Cyrillic_General_CI_AS NULL ,
[data] [datetime] NULL ,
[summa] [numeric](11, 2) NULL ,
[naim] [char] (45) COLLATE Cyrillic_General_CI_AS NULL ,
[raion] [tinyint] NULL ,
[user1] [char] (10) COLLATE Cyrillic_General_CI_AS NULL ,
[myguid] [uniqueidentifier] NOT NULL ,
[mes] [numeric](2, 0) NULL ,
[god] [numeric](4, 0) NULL ,
[nazn] [char] (250) COLLATE Cyrillic_General_CI_AS NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[plato] WITH NOCHECK ADD
CONSTRAINT [DF_plato_myguid] DEFAULT (newid()) FOR [myguid]
GO

CREATE UNIQUE INDEX [IX_plato] ON [dbo].[plato]([kod], [nplt], [data], [priz]) ON [PRIMARY]
GO
...
Рейтинг: 0 / 0
06.10.2008, 10:22
    #35577367
cursoradapter duplicate key
вот КАД для Вашего случая

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

после того как у Вас это заработает, сообщите, что
не устраивает и что необходимо доработать(исправить)

Код: plaintext
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.
close databases all

local lcConnString, lnConnection, ;
	loMyCAD as CursorAdapter, ;
	laErrors[ 1 ]

text to lcConnString noshow pretext  15 
	Driver=SQL Native Client;
	SERVER=....;
	DATABASE=test;
	uid=sa;
	pwd=as;
endtext	

lnConnection = sqlstringconnect(lcConnString)
if lnConnection<= 0 
   messagebox('не подцепился')
   return 
endif

text to lcSqlCmd noshow pretext  7 
	if object_id('dbo.plato') is not null drop table plato
	begin
		CREATE TABLE [dbo].[plato] ([kod]    [numeric]( 8 ,  0 )                                NOT NULL ,
									[nplt]   [numeric]( 6 ,  0 )                                NULL ,
									[priz]   [char] ( 6 )      COLLATE Cyrillic_General_CI_AS NULL ,
									[data]   [datetime]                                     NULL ,
									[summa]  [numeric]( 11 ,  2 )                               NULL ,
									[naim]   [char] ( 45 ) COLLATE Cyrillic_General_CI_AS     NULL ,
									[raion]  [tinyint]                                      NULL ,
									[user1]  [char] ( 10 ) COLLATE Cyrillic_General_CI_AS     NULL ,
									[myguid] [uniqueidentifier]                             NOT NULL ,
									[mes]    [numeric]( 2 ,  0 )                                NULL ,
									[god]    [numeric]( 4 ,  0 )                                NULL ,
									[nazn]   [char] ( 250 ) COLLATE Cyrillic_General_CI_AS    NULL 
									) ON [PRIMARY]

		ALTER TABLE [dbo].[plato] WITH NOCHECK ADD 
		CONSTRAINT [DF_plato_myguid] DEFAULT (newid()) FOR [myguid]

		CREATE UNIQUE INDEX [IX_plato] ON [dbo].[plato]([kod], [nplt], [data], [priz]) ON [PRIMARY]
	end
endtext
if sqlexec(lnConnection, lcSqlCmd)< 0 
	messagebox('не создал табличку')
    return 
endif 

loMyCAD = createobject('CursorAdapter')
with loMyCAD
	.Alias              = 'MyAlias'
	.DataSourceType     = 'ODBC'
	.DataSource         = lnConnection
	.SelectCmd          = "select * from plato"
	.Tables             = 'plato'
	.BufferModeOverride =  5 
	.cursorschema       = ""
	.keyFieldList		= 'myguid'
	text to .UpdatableFieldList noshow pretext  15 
		kod,nplt,data,summa,naim,priz,user1,raion,mes,god
	endtext 
	text to	.updateNameList noshow pretext  15 
	    myguid plato.myguid, kod plato.kod, nplt plato.nplt,
		Data plato.Data, summa plato.summa, naim plato.naim,
		priz plato.priz, user1 plato.user1, raion plato.raion,
		mes plato.mes, god plato.god
	endtext 
	if .CursorFill(!empty(.cursorschema),.f.)
		insert into (.Alias) (kod) values ( 1 )
		insert into (.Alias) (kod) values ( 2 )
		if !tableupdate(.t., .f.,.Alias)
			aerror(laErrors)
		    messagebox(laErrors[ 2 ])
		endif
	else
		aerror(laErrors)
		messagebox(laErrors[ 2 ])
	endif .CursorFill(.t.)
endwith
...
Рейтинг: 0 / 0
06.10.2008, 16:41
    #35578586
vtanya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursoradapter duplicate key
Все дело в том, что эти явления возникают , когда записей в таблице на сервере больше 100.
Это у нас что-то с сервером и как можно выпутаться из этой ситуации.
Зайчику большое спасибо
...
Рейтинг: 0 / 0
06.10.2008, 16:58
    #35578638
12345зайчик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursoradapter duplicate key
авторВсе дело в том, что эти явления возникают , когда записей в таблице на сервере больше 100.

не верю
100 записей - это не количество,
просто у Вас уже какая-то путаница

Вы не ответили на вопрос какая у Вас проблема.
Вы не можете просунуть какие-то записи на сервер?
или Вас беспокоит сам факт появления ошибки?

ошибка изм-я на сервере + профайлер однозначно Вам покажут,
какие комбинации Вы не можете вставить(изменить)
...
Рейтинг: 0 / 0
06.10.2008, 17:02
    #35578650
12345зайчик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursoradapter duplicate key
еще на вопросы отвечайте

-доступ синхронный/ асинхр.?
-если просто селектом тянете, есть проблемы?
-Каду св-во FeshSize -1 ставили?

если нет результата - покажите ХП Vplato
+ опишите алгоритм, что нужно сделать (сколько и каких записей добавить),
чтобы увидеть Вашу проблему
...
Рейтинг: 0 / 0
07.10.2008, 11:04
    #35579742
vtanya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursoradapter duplicate key
Явление duplicate key на MS SQL возникает, когда в таблице большое количество записей , как только таблица небольшая программа прорабатывае прекрасно.
На самом SQL сервере , когда редактирую большие таблицы, возникает ошибка FIREHOSE, на маленьких этого нет
...
Рейтинг: 0 / 0
07.10.2008, 11:20
    #35579793
Погодин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursoradapter duplicate key
а может на сервере для autoinc поля задана малая размерность и они начинают повторяться ?
...
Рейтинг: 0 / 0
07.10.2008, 12:21
    #35579980
12345зайчик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursoradapter duplicate key
авторЯвление duplicate key на MS SQL возникает, когда в таблице большое количество записей

по Вашим ответам можно только гадать на кофейной гуще ...

хорошо, они возникают
Вы смотрите в профайлере, что происходит?

Вы должны видеть "проблеммную" команду,
хорошо - она "проблеммная"

затяните ее в кверианалайзер - выполните,
какой результат?

очень сложно Вам помочь. Вы не даете ответы на поставленные вопросы.

разберитесь со стуктурой таблицы, с Вашей ХП.
Посмотрите трейс - там все будет показано - в чем Ваша проблема.

Без трейса, без понимания что там у Вас происходит,
без ответов - я бессилен Вам помочь.
...
Рейтинг: 0 / 0
07.10.2008, 15:04
    #35580597
vtanya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursoradapter duplicate key
Решила перейти на хранимые процедуры, обычные запросы, раз не получилось через cursoradapter и fox , хотела перевести свои старые программы. С большим количеством записей проблема не только у меня, смотрела форум MSSQL - а ответов нет( это по поводу firehose).
Спасибо всем, кто откликнулся.
...
Рейтинг: 0 / 0
07.10.2008, 15:24
    #35580684
12345зайчик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursoradapter duplicate key
авторРешила перейти на хранимые процедуры, обычные запросы, раз не получилось через cursoradapter

у меня все работает прекрасно.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
this.oCadPeectpn = oServer.CreateCadObject(this,				;
											 "Peectpn",			;	&& таблица на сервере
											 "opid",		    ;	&& ключь-линк в таблице
											 "",				;   && обновляемые поля в таблице
											 "#AllSqlDataToFox#",;	&& схема - преобразов-е типов
											 "", 				;   && условие в запросе
											 "", 				;   && поля в строке запроса к таблице сервера
											 "", 				;	&& group by
											 "",			    ;	&& order by
											 "",				;	&& добавчик к SelectCmd
											 "exec SELECT_Peectpn @cWhere = ?pcWhere, @cOrderBy='code_nak'", ; && если уж совсем нестандартный запрос
											 "Peectpn")				&& имя алиаза
IF VARTYPE(this.oCadPeectpn)<>"O"
	RETURN .F.
endif



автора ответов нет

Вы старательно не даете Вам помочь.
Чтобы Вам помочь нужно установить причину.
...
Рейтинг: 0 / 0
07.10.2008, 15:27
    #35580698
12345зайчик
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursoradapter duplicate key
еще раз прошу ответить на вопрос

я Вас просил выставить синхронный режим работы с данными
+ установить фетчсайз в Каде в -1

Вы это делали?
...
Рейтинг: 0 / 0
16.10.2008, 12:30
    #35597993
vtanya
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cursoradapter duplicate key
Я стараюсь делать все, что бы Вы мне помогли. Пробую все , что говорите.но не получается. С хранимыми процедурами получилось.Захожу редко, когда на работе бывает возможность
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / cursoradapter duplicate key / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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