Visual basic-helv...

Som jag påpekade tidigare, det funkar inte att göra så...
Skriv nu om mitt första exempel så är problemet löst.

Jag är som sagt inte så haj på detta... Jag får The CREATE TABLE SQL construct or statement is not supported. Jag skriver fel nånstans antar jag?


Create table dbo.Producers (dbo.Producers.CID UNIQUEIDENTIFIER, dbo.Producers.Name VARCHAR(100))
GO
CREATE TABLE dbo.ProducerStatus.Status(dbo.Producers.CID UNIQUEIDENTIFIER, [STATUS] CHAR(1), CHANGE_DATE DATETIME)
GO
INSERT INTO dbo.Producers (dbo.Producers.CID, dbo.Producers.Name)
SELECT TOP 100 NEWID(),NAME
FROM SYSOBJECTS
GO
-- KÖR NEDANSTÅENDE NÅGRA GÅNGER MED NÅGRA SEKUNDERS MELLANRUM FÖR ATT FYLLA TABELLEN, BYT UT STATUS MELLAN A OCH I
-- AVSLUTA MED I SOM STATUS
INSERT INTO dbo.ProducerStatus
SELECT dbo.Producers.CID,'A', GETDATE()
FROM dbo.Producers P

GO
--FÖR ATT FÅ 13 MED STATUSEN AKTIV
INSERT INTO dbo.ProducerStatus
SELECT TOP 13 P. dbo.Producers.CID,'A', GETDATE()
FROM dbo.Producers P
 
Ser paj ut ;)

Hinner inte kolla mer just nu, men jag började med en query som bör funka för att lista alla senaste statusar. Om du inte får till det kan jag kolla mer i eftermiddag

select s.CIN, s.Date, s.Status
from(
select max(Date) as maxdate, CIN
from dbo.ProducerStatus group by CIN;
) as x inner join dbo.ProducerStatus as s on s.CIN = x.CIN and s.Date = x.maxdate;

Error in GROUP BY clause.
Unable to parse query text.
 
Error in GROUP BY clause.
Unable to parse query text.

select s.CIN, s.Date, s.Status
from(
select CIN, max(Date) as maxdate
from dbo.ProducerStatus group by CIN
) as x inner join dbo.ProducerStatus as s on s.CIN = x.CIN and s.Date = x.maxdate
 
Oj jag skickade med ett semikolon för mycket. Eller så var det nåt annat fel. lite för meckigt att skriva SQL utan att testa ;)
 
Jag är som sagt inte så haj på detta... Jag får The CREATE TABLE SQL construct or statement is not supported. Jag skriver fel nånstans antar jag?


Create table dbo.Producers (dbo.Producers.CID UNIQUEIDENTIFIER, dbo.Producers.Name VARCHAR(100))
GO
CREATE TABLE dbo.ProducerStatus.Status(dbo.Producers.CID UNIQUEIDENTIFIER, [STATUS] CHAR(1), CHANGE_DATE DATETIME)
GO
INSERT INTO dbo.Producers (dbo.Producers.CID, dbo.Producers.Name)
SELECT TOP 100 NEWID(),NAME
FROM SYSOBJECTS
GO
-- KÖR NEDANSTÅENDE NÅGRA GÅNGER MED NÅGRA SEKUNDERS MELLANRUM FÖR ATT FYLLA TABELLEN, BYT UT STATUS MELLAN A OCH I
-- AVSLUTA MED I SOM STATUS
INSERT INTO dbo.ProducerStatus
SELECT dbo.Producers.CID,'A', GETDATE()
FROM dbo.Producers P

GO
--FÖR ATT FÅ 13 MED STATUSEN AKTIV
INSERT INTO dbo.ProducerStatus
SELECT TOP 13 P. dbo.Producers.CID,'A', GETDATE()
FROM dbo.Producers P

Alltså, detta är kod du kör i Management studion för att skapa lite tabeller som mitt exempel opererar på...... Inte kör execute på från VB...


Det viktiga biten är följande:



SELECT P.PRODUCER_ID,P.PRODUCER_NAME,PSUB.MAX_DATE ,PS.STATUS FROM
PRODUCERS P
INNER JOIN
-- Subquery för att hämta ut senaste ändringen för varje producer
(SELECT MAX(CHANGE_DATE) AS MAX_DATE, PRODUCER_ID
FROM PRODUCER_STATUS
GROUP BY PRODUCER_ID) PSUB

ON PSUB.PRODUCER_ID = P.PRODUCER_ID
INNER JOIN PRODUCER_STATUS PS --Joina in Producer status för att få
--fram statusen för senaste ändring
ON PSUB.MAX_DATE = PS.CHANGE_DATE --Hämta bara ut senaste
--ändringen
AND PS.PRODUCER_ID = PSUB.PRODUCER_ID
AND P.PRODUCER_ID = PS.PRODUCER_ID
AND PS.STATUS='A' --Och försäkra dig om att senaste ändringen är av
--typen 'A'


Byt ut fältnamnen mot dina egna så funkar det
(OK, inte helt snällt att byta ut fältnamnen mot mina egna, men det har ett pedagogiskt syfte)
 
select s.CIN, s.Date, s.Status
from(
select CIN, max(Date) as maxdate
from dbo.ProducerStatus group by CIN
) as x inner join dbo.ProducerStatus as s on s.CIN = x.CIN and s.Date = x.maxdate

Ger ett resultat! :) Dock både aktiva och inaktiva producenter, vilket kan bero på att man kan ha blivit antingen aktiverad eller inaktiverad det sista registrerade datumet.

SE7002276652 2009-01-08 15:40:19 A
SE556756118701 2009-07-28 08:48:40 I
SE5566415301 2010-09-10 08:49:50 I
SE556568570701 2010-06-01 09:02:49 A
SE556554027401 2009-03-30 10:13:25 I
SE55648951660 2009-01-08 15:43:23 A
SE556401379401 2011-03-04 14:13:54 A
SE556254124201 2009-01-13 21:10:12 A
osv...

2661 rader
 
Ger ett resultat! :) Dock både aktiva och inaktiva producenter, vilket kan bero på att man kan ha blivit antingen aktiverad eller inaktiverad det sista registrerade datumet.

SE7002276652 2009-01-08 15:40:19 A
SE556756118701 2009-07-28 08:48:40 I
SE5566415301 2010-09-10 08:49:50 I
SE556568570701 2010-06-01 09:02:49 A
SE556554027401 2009-03-30 10:13:25 I
SE55648951660 2009-01-08 15:43:23 A
SE556401379401 2011-03-04 14:13:54 A
SE556254124201 2009-01-13 21:10:12 A
osv...

2661 rader

Lägg till villkoret a status skall vara 'A'
 
:shrules:pussa

Jag älskar sporthoj.com!

<3 <3 <3 <3 Hjärtan för helvete!

Slutresultatet:

SELECT s.CIN, dbo.Producers.Name, dbo.Addresses.ZipCode, dbo.Addresses.Address, dbo.Addresses.City
FROM (SELECT CIN, MAX(Date) AS maxdate
FROM dbo.ProducerStatus
GROUP BY CIN) AS x INNER JOIN
dbo.ProducerStatus AS s ON s.CIN = x.CIN AND s.Date = x.maxdate INNER JOIN
dbo.Producers ON s.CIN = dbo.Producers.CIN INNER JOIN
dbo.Addresses ON dbo.Producers.CIN = dbo.Addresses.CIN
WHERE (s.Status = 'A') AND (dbo.Addresses.AddressType = 'M')
 
:shrules:pussa

Jag älskar sporthoj.com!

<3 <3 <3 <3 Hjärtan för helvete!

Slutresultatet:

SELECT s.CIN, dbo.Producers.Name, dbo.Addresses.ZipCode, dbo.Addresses.Address, dbo.Addresses.City
FROM (SELECT CIN, MAX(Date) AS maxdate
FROM dbo.ProducerStatus
GROUP BY CIN) AS x INNER JOIN
dbo.ProducerStatus AS s ON s.CIN = x.CIN AND s.Date = x.maxdate INNER JOIN
dbo.Producers ON s.CIN = dbo.Producers.CIN INNER JOIN
dbo.Addresses ON dbo.Producers.CIN = dbo.Addresses.CIN
WHERE (s.Status = 'A') AND (dbo.Addresses.AddressType = 'M')

Nästa gång du vill skapa en SQL query så gör den i Access i design läge och testar. När den fungerar växlar du till SQL läge och kör en copy och past tilll din VisualBasic Application. Lätt som en plätt.
 
Nyheter
Mälaren Runt fyller 40 år

Nu på lördagen den 15 augus...

Steve Holcombe klar för GGN!

Pressmeddelande 2026-08-10 ...

Nya Chief Vintage Sturgis

I samband med 86:e Sturgis ...

Missa inte Bikes sommarnummer!

Innehåll Bike powered by...

Missa inte Bikes sommarnummer!

Innehåll Bike powered by...

Shelby Turner, klar för GGN

Pressmeddelande 2026-08-05F...

Premiär för Östgöta Dundret

Under 1940 talet var Finspå...

Ny 500-kubiks retro från Honda

Efter rykten om en ny retro...

Ny 500-kubiks retro från Honda

Efter rykten om en ny retro...

Ny 500-kubiks retro från Honda

Efter rykten om en ny retro...

Back
Top