powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / cursoradapter duplicate key
19 сообщений из 19, страница 1 из 1
cursoradapter duplicate key
    #35575305
vtanya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Бьюсь какой день, на работе никто не может помочь.
Помогите!!!!
Объявлен 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
cursoradapter duplicate key
    #35575372
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторlo_cao.KeyFieldList="kod,nplt,data,priz"

бред

оставьте только первичный ключь
...
Рейтинг: 0 / 0
cursoradapter duplicate key
    #35575388
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
cursoradapter duplicate key
    #35575398
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторвыдается сообщение

когда?

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

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

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

я нарисую код под Вашу проблему
...
Рейтинг: 0 / 0
cursoradapter duplicate key
    #35575452
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
cursoradapter duplicate key
    #35575613
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторТаблица должна редактироваться? Правильно я понимаю?
я так понимаю, проблема с редактированием
серверной стороны и добавлением записей в серверную таблицу

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

смешали в кучу сервер, клиента ...,
что редактируем, куда ...
...
Рейтинг: 0 / 0
cursoradapter duplicate key
    #35577296
vtanya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переставила строки с ключевыми параметрами, тот же эффект.
Сваливается на 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
cursoradapter duplicate key
    #35577367
вот КАД для Вашего случая

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

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

Код: 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
cursoradapter duplicate key
    #35578586
vtanya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все дело в том, что эти явления возникают , когда записей в таблице на сервере больше 100.
Это у нас что-то с сервером и как можно выпутаться из этой ситуации.
Зайчику большое спасибо
...
Рейтинг: 0 / 0
cursoradapter duplicate key
    #35578638
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторВсе дело в том, что эти явления возникают , когда записей в таблице на сервере больше 100.

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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