W mojej bazie przetrzymuj� id rekord�w bazy zewn�trznej i dokonuj�
z��czenia tych dw�ch tabel.
Wybra�em kwerend� aktualizuj�c� ale mam powy�szy b��d. Z tego co
przeczyta�em na ten temat to widz�, �e ta kwerenda s�u�y do aktualizacji
danych z pojedynczych tabel.
Co mog� zrobi� �eby dokona� synchronizacji danych?
przypuszczam że tabela do której się podłączyłeś jest tylko do odczytu
co utrudnia stworzenie kwerendy aktualizującej ustaw we właściwościach
kwerendy: Typ zestawu rekordów: Dynamiczny (niespójne aktualizacje) -
powinno pomóc
nie mog� znale�� opcji Typ zestawu rekord�w?
Przemys�aw Rachwa� wrote:
> On 26 Cze, 11:02, Adam <adam70...@op.pl> wrote:
>> Chc� synchronizowa� dane tabeli mojego programu z danymi zewn�trznego
>> systemu.
>>
>> W mojej bazie przetrzymuj� id rekord�w bazy zewn�trznej i dokonuj�
>> z��czenia tych dw�ch tabel.
>>
>> Wybra�em kwerend� aktualizuj�c� ale mam powy�szy b��d. Z tego co
>> przeczyta�em na ten temat to widz�, �e ta kwerenda s�u�y do aktualizacji
>> danych z pojedynczych tabel.
>>
>> Co mog� zrobi� �eby dokona� synchronizacji danych?
>
> przypuszczam �e tabela do kt�rej si� pod��czy�e� jest tylko do odczytu
> co utrudnia stworzenie kwerendy aktualizuj�cej ustaw we w�a�ciwo�ciach
> kwerendy: Typ zestawu rekord�w: Dynamiczny (niesp�jne aktualizacje) -
> powinno pomďż˝
prawoklikiem w szare (tam gdzie są bazy tabele i kwerendy jak się je
doda) w okienku QBE, właściwości
||| Z�o�enie jest mojej tabeli oraz widoku z bazy zewn�trznej (z niego
||| czytam w�a�nie dane)
|||
||| nie mog� znale�� opcji Typ zestawu rekord�w?
||||| Chcďż˝ synchronizowaďż˝ dane tabeli mojego programu z danymi
||||| zewn�trznego systemu.
||||| W mojej bazie przetrzymuj� id rekord�w bazy zewn�trznej i dokonuj�
||||| z��czenia tych dw�ch tabel.
||||| Wybra�em kwerend� aktualizuj�c� ale mam powy�szy b��d. Z tego co
||||| przeczyta�em na ten temat to widz�, �e ta kwerenda s�u�y do
||||| aktualizacji danych z pojedynczych tabel.
||||| Co mog� zrobi� �eby dokona� synchronizacji danych?
|||| przypuszczam �e tabela do kt�rej si� pod��czy�e� jest tylko do
|||| odczytu co utrudnia stworzenie kwerendy aktualizuj�cej ustaw we
|||| w�a�ciwo�ciach kwerendy: Typ zestawu rekord�w: Dynamiczny
|||| (niesp�jne aktualizacje) - powinno pom�c
|||
||
|| prawoklikiem w szare (tam gdzie sďż˝ bazy tabele i kwerendy jak siďż˝ je
|| doda) w okienku QBE, w�a�ciwo�ci
| Czy to �e w kwerendzie wybieraj�cej korzystam z po��czenia tabeli i
| tabeli (widoku) ?
| Mo�e to ten widok tutaj stanowi problem?
Czy ten widok jest jakoďż˝ do bazy podlinkowany?
Czy access widzi co w nim jest kluczem g��wnym?
Czy tabela ma klucz g��wny ?
Podaj troch� wi�cej szczeg��w, cho�by SQL tej kwerendy...
--
KN
Teraz to co zaobserwowa�em:
Pod serwerem sql pr�ba zmiany warto�ci w widoku ko�czy si� b��dem:
niedostateczne informacje o kolumnie klucza w celu aktualizacji lub
od�wie�ania
use master
GO
IF EXISTS (SELECT name FROM master.dbo.sysdatabases WHERE name =
N'testView')
DROP DATABASE [testView]
GO
CREATE DATABASE [testView] ON (NAME = N'testView_Data', FILENAME =
N'C:\Program Files\Microsoft SQL Server\MSSQL\data\testView_Data.MDF' ,
SIZE = 1, FILEGROWTH = 10%) LOG ON (NAME = N'testView_Log', FILENAME =
N'C:\Program Files\Microsoft SQL Server\MSSQL\data\testView_Log.LDF' ,
SIZE = 1, FILEGROWTH = 10%)
COLLATE Polish_CI_AS
GO
exec sp_dboption N'testView', N'autoclose', N'false'
GO
exec sp_dboption N'testView', N'bulkcopy', N'false'
GO
exec sp_dboption N'testView', N'trunc. log', N'false'
GO
exec sp_dboption N'testView', N'torn page detection', N'true'
GO
exec sp_dboption N'testView', N'read only', N'false'
GO
exec sp_dboption N'testView', N'dbo use', N'false'
GO
exec sp_dboption N'testView', N'single', N'false'
GO
exec sp_dboption N'testView', N'autoshrink', N'false'
GO
exec sp_dboption N'testView', N'ANSI null default', N'false'
GO
exec sp_dboption N'testView', N'recursive triggers', N'false'
GO
exec sp_dboption N'testView', N'ANSI nulls', N'false'
GO
exec sp_dboption N'testView', N'concat null yields null', N'false'
GO
exec sp_dboption N'testView', N'cursor close on commit', N'false'
GO
exec sp_dboption N'testView', N'default to local cursor', N'false'
GO
exec sp_dboption N'testView', N'quoted identifier', N'false'
GO
exec sp_dboption N'testView', N'ANSI warnings', N'false'
GO
exec sp_dboption N'testView', N'auto create statistics', N'true'
GO
exec sp_dboption N'testView', N'auto update statistics', N'true'
GO
if( (@@microsoftversion / power(2, 24) = 8) and (@@microsoftversion &
0xffff >= 724) )
exec sp_dboption N'testView', N'db chaining', N'false'
GO
use [testView]
GO
if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[FK_SM_MG]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[SM] DROP CONSTRAINT FK_SM_MG
GO
if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[FK_CN_TW]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[CN] DROP CONSTRAINT FK_CN_TW
GO
if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[FK_SM_TW]') and OBJECTPROPERTY(id, N'IsForeignKey') = 1)
ALTER TABLE [dbo].[SM] DROP CONSTRAINT FK_SM_TW
GO
if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[VError]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[VError]
GO
if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[VOK1]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[VOK1]
GO
if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[ViewError1]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[ViewError1]
GO
if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[vSM_Sum]') and OBJECTPROPERTY(id, N'IsView') = 1)
drop view [dbo].[vSM_Sum]
GO
if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[CN]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[CN]
GO
if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[SM]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[SM]
GO
if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[MG]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[MG]
GO
if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[TW]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[TW]
GO
CREATE TABLE [MG] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[name] [varchar] (50) COLLATE Polish_CI_AS NOT NULL ,
CONSTRAINT [PK_MG] PRIMARY KEY CLUSTERED ([id]) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [TW] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[name] [varchar] (50) COLLATE Polish_CI_AS NOT NULL ,
CONSTRAINT [PK_TW] PRIMARY KEY CLUSTERED ([id]) ON [PRIMARY]
) ON [PRIMARY]
GO
CREATE TABLE [CN]
(
[id] [int] IDENTITY (1, 1) NOT NULL ,
[twId] [int] NOT NULL ,
[type] [int] NOT NULL ,
[price] [float] NOT NULL ,
CONSTRAINT [PK_CN] PRIMARY KEY CLUSTERED ([id]) ON [PRIMARY] ,
CONSTRAINT [FK_CN_TW] FOREIGN KEY ([twId]) REFERENCES [TW] ([id])
) ON [PRIMARY]
GO
CREATE TABLE [SM] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[twId] [int] NOT NULL ,
[mgId] [int] NOT NULL ,
[state] [float] NOT NULL ,
CONSTRAINT [PK_SM] PRIMARY KEY CLUSTERED ([id]) ON [PRIMARY] ,
CONSTRAINT [FK_SM_MG] FOREIGN KEY ([mgId]) REFERENCES [MG] ([id]),
CONSTRAINT [FK_SM_TW] FOREIGN KEY ([twId]) REFERENCES [TW] ([id])
) ON [PRIMARY]
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE VIEW dbo.vSM_Sum
AS
SELECT twId, SUM(state) AS state
FROM dbo.SM
GROUP BY twId
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE VIEW dbo.VError
AS
SELECT dbo.TW.id, dbo.TW.name, dbo.vSM_Sum.state, CN_T1.price AS
price1, CN_T2.price AS price2
FROM dbo.TW INNER JOIN
dbo.CN CN_T1 ON dbo.TW.id = CN_T1.twId INNER JOIN
dbo.CN CN_T2 ON dbo.TW.id = CN_T2.twId INNER JOIN
dbo.vSM_Sum ON dbo.TW.id = dbo.vSM_Sum.twId
WHERE (CN_T1.type = 1) AND (CN_T2.type = 2)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE VIEW dbo.Vok1
AS
SELECT dbo.TW.id, dbo.TW.name, dbo.vSM_Sum.state
FROM dbo.TW INNER JOIN
dbo.vSM_Sum ON dbo.TW.id = dbo.vSM_Sum.twId
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE VIEW dbo.ViewError1
AS
SELECT dbo.TW.id, dbo.TW.name, dbo.vSM_Sum.state, CN_T1.price AS p1,
CN_T2.price AS p2
FROM dbo.TW INNER JOIN
dbo.CN CN_T1 ON dbo.TW.id = CN_T1.twId INNER JOIN
dbo.CN CN_T2 ON dbo.TW.id = CN_T2.twId INNER JOIN
dbo.vSM_Sum ON dbo.TW.id = dbo.vSM_Sum.twId
WHERE (CN_T1.type = 1) AND (CN_T2.type = 2)
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
INSERT INTO [testView].[dbo].[MG] VALUES('MG1')
INSERT INTO [testView].[dbo].[MG] VALUES('MG2')
INSERT INTO [testView].[dbo].[MG] VALUES('MG3')
INSERT INTO [testView].[dbo].[TW] VALUES('TW1')
INSERT INTO [testView].[dbo].[TW] VALUES('TW2')
INSERT INTO [testView].[dbo].[TW] VALUES('TW3')
INSERT INTO [testView].[dbo].[CN] VALUES(1, 1, '101')
INSERT INTO [testView].[dbo].[CN] VALUES(1, 2, '102')
INSERT INTO [testView].[dbo].[CN] VALUES(2, 1, '201')
INSERT INTO [testView].[dbo].[CN] VALUES(2, 2, '202')
INSERT INTO [testView].[dbo].[CN] VALUES(3, 1, '301')
INSERT INTO [testView].[dbo].[CN] VALUES(3, 2, '302')
INSERT INTO [testView].[dbo].[SM] VALUES( 1, 1, '50')
INSERT INTO [testView].[dbo].[SM] VALUES( 1, 2, '150')
INSERT INTO [testView].[dbo].[SM] VALUES( 2, 1, '200')
INSERT INTO [testView].[dbo].[SM] VALUES( 3, 1, '130')
INSERT INTO [testView].[dbo].[SM] VALUES( 3, 1, '140')
INSERT INTO [testView].[dbo].[SM] VALUES( 3, 1, '30')
co jest �r�d�em danych kt�re chcesz poprawi� kwerend�
by� mo�e ca�o�� mo�na zrealizowa� z poziomu SQL-serwer-a . Ma od do
dyspozycji Linked Servers, dzieki temu mo�na podlinkowa� baz� Oraclow�
lub plik Access, tudzieďż˝ inne dane
--
Przemek
"Non sunt multiplicanda entia sine necessitate"
http://vbamania.blogspot.com