BrimbaMedlem sedan dec. 19995 875 inlägg Hej!
Låt mig säga att jag har två tabeller.
De kan se ut så här tillexempel:
Tabell 1
KundID Namn Telefon
Tabell 2
KundID Valfritt
KundID i tabell 1 är en räknare
KundID i tabell 2 är enbart tal
KundID i de båda tabellerna har en relation till varandra.
Låt mig nu säga att datan i tabell 1 ser ut så här:
1 Patrik 031-111111
2 Birger 031-222222
3 Fredrik 031-333333
5 Robert 031-444444
Tabell 2 skall då se ut så här:
1 Valfri text
2 Annan text
3 Valfri text
5 Annan valfri text
Alltså vill jag när man gör en insert i tabell 1 så skall man även göra en insert i tabell 2 och den skall ju ha samma nummer som det tal som räknaren i tabell 1 har.
Går detta att lösa på något sätt?
I Access kan man ju tex lista båda tabellerna med tabell 1 som ID, och när man då gör ett tillägg i ett fält som tillhör tabell 2 så läggs det ju in med tabell 1´s ID nummer.
Tacksam för hjälp!
------------------
Mvh
Patrik
aka Brimba
www.datormaklarna.se
patrik@datormaklarna.se
SweyMedlem sedan apr. 20003 971 inlägg Har du provat
INSERT INTO tabell1, tabell2 ... ?
------------------
/mvh Swey
Wadde Hadde Dudde Da
Programmera Php (snart)
swey@tjohoo.se
fredrikMedlem sedan dec. 19991 072 inlägg Hej, jag vet inte om jag har fattat det rätt, men du vill alltså först göra en insert i en tabell (där ena kolumnen är räknare) och sedan använda räknarens id i nästa insert.
Enklast att göra detta är nog i en stored procedure.
Du borde kunna använda följande kod:
CREATE PROCEDURE [min_sp]
@namn varchar(20),
@telefon varchar(20),
@valfritt varchar (200)
AS
INSERT INTO tabell1
(namn, telefon)
VALUES
(@namn,@telefon)
INSERT INTO tabell2
(kundID, valfritt)
VALUES
(@@IDENTITY, @valfritt)
@@identity innebär att den hämtar senast skapade Identity (i detta fallet räknaren)
När du anropar din sp skriver du sen:
sql="EXEC min_sp @namn='"&namn&"', @telefon='"&telefon&"', @valfritt='"&valfritt&"'"
detta borde funka...och borde även vara det bästa sättet då du slipper hämta id:et med nån select-sats mellan insert-satserna.
------------------
Fredrik Klarqvist
fredrik.klarqvist@swipnet.se
www.streetwise.se/fredrik/
BrimbaMedlem sedan dec. 19995 875 inlägg Hej!
Nej, jag har inte provat det, men problemet är när man skall ta insert. Hur skall satsen se ut?
SQLStmt = "INSERT INTO tabInternetKorg"
SQLStmt = SQLStmt & "(Namn, Telefon)"
SQLStmt = SQLStmt & "VALUES(" & Request.Form("Namn") & ", " & Request.Form("Telefon") & ")"
Skall det bli så här?
SQLStmt = "INSERT INTO tabell1, tabell2"
SQLStmt = SQLStmt & "(Namn, Telefon), (Valfritt)"
SQLStmt = SQLStmt & "VALUES(" & Request.Form("Namn") & ", " & Request.Form("Telefon") & "),(" & Request.Form("Valfritt") & ")"
///Patrik
SweyMedlem sedan apr. 20003 971 inlägg Jag kan inte så mycket SQL så jag kan bara rekommendera att du kolla i en manual eller provar själv :)
------------------
/mvh Swey
Wadde Hadde Dudde Da
Programmera Php (snart)
swey@tjohoo.se
fredrikMedlem sedan dec. 19991 072 inlägg Prova med den stored proceduren jag skriv här ovanför...
skriv gärna om det funkade sen!
------------------
Fredrik Klarqvist
fredrik.klarqvist@swipnet.se
www.streetwise.se/fredrik/
BrimbaMedlem sedan dec. 19995 875 inlägg CREATE PROCEDURE [min_sp]
@namn varchar(20),
@telefon varchar(20),
@valfritt varchar (200)
AS
INSERT INTO tabInternetKund1
(namn, telefon)
VALUES
(@namn,@telefon)
INSERT INTO tabInternetKund2
(kundID, Valfritt)
VALUES
(@@IDENTITY, @valfritt)
SQLStmt="EXEC min_sp @namn='"& Request.Form("EfterNamn") &"', @telefon='"& Request.Form("TelHem") &"', @valfritt='"& Request.Form("GatuAdress") &"'"
Connection.Execute(SQLStmt)
Jag har provat med oavnstående kod utan att få det att fungera.
Felmeddelande:
Microsoft VBScript compilation error '800a0401'
Expected end of statement
/register/registeremail.asp, line 23
CREATE PROCEDURE [min_sp]
-----------------^
Jag har även provat att köra med:
CREATE PROCEDURE min_sp
men det fungerar inte heller
Tack!
///Patrik
SweyMedlem sedan apr. 20003 971 inlägg Det är SQL alltså. Inte VBScript-kod. Lägg in allt i en variabel och avsluta varje rad med ;
------------------
/mvh Swey
Wadde Hadde Dudde Da
Programmera Php (snart)
swey@tjohoo.se
BrimbaMedlem sedan dec. 19995 875 inlägg Har du lust att skriva koden för mig? :)
fredrikMedlem sedan dec. 19991 072 inlägg Hej igen,
jag var kanske lite oklar innan.
koden till din stored procedure lägger du in som Ny under stored procedure i sql.
kontrollera även att du har rätt namn på dina tabeller och kolumner. detta kan du göra genom att klicka på check syntax.
I din asp-sida anropar du sedan din stored procedur så här:
<%
sql="EXEC min_sp @namn='"&namn&"', @telefon='"&telefon&"', @valfritt='"&valfritt&"'"
connection.execute(sql)
%>
du skickar alltså med variablerna namn, telefon och valfritt till din SP som sedan körs.
Hoppas det funkar!
------------------
Fredrik Klarqvist
fredrik.klarqvist@swipnet.se
www.streetwise.se/fredrik/
BrimbaMedlem sedan dec. 19995 875 inlägg Hej!
Jag har nu gjort så här:
SQL = "CREATE PROCEDURE [min_sp] @namn varchar(20), @telefon varchar(20), @valfritt varchar (200) AS INSERT INTO tabInternetKund1 (namn, telefon) VALUES (@namn,@telefon) INSERT INTO tabInternetKund2 (kundID, Valfritt) VALUES (@@IDENTITY, @valfritt)"
SQLStmt= SQL & "EXEC min_sp @namn='"& Request.Form("EfterNamn") &"', @telefon='"& Request.Form("TelHem") &"', @valfritt='"& Request.Form("GatuAdress") &"'"
Connection.Execute(SQLStmt)
Felmeddelande:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access 97 Driver] Syntax error in CREATE TABLE statement.
/register/registeremail.asp, line 25
Line 25 är:
Connection.Execute(SQLStmt)
Saken är den att jag kör Access database, ej SQLServer....
///Patrik
SweyMedlem sedan apr. 20003 971 inlägg I Access kan man inte skapa procedurer genom kod (vad jag vet). Du får skapa den genom att använda programmet MS Access.
------------------
/mvh Swey
Wadde Hadde Dudde Da
Programmera Php (snart)
swey@tjohoo.se
BrimbaMedlem sedan dec. 19995 875 inlägg var lägger man in en store procedure där?
Kan man inte först "göra" en store procedure och sedan köra den på något sätt?
///Patrik
[Redigerat av Brimba den 19 maj 2000]
BrimbaMedlem sedan dec. 19995 875 inlägg I Access hjälp står det så här:
lagrad procedur
Ett eller flera SQL-uttryck som accepterar egna variabler, villkorlig körning eller andra styrningar av programflödet. En lagrad procedur finns på en server.
BrimbaMedlem sedan dec. 19995 875 inlägg I Access finns följande "flikar"
Tabeller
Frågor
Formulär
Rapporter
Makron
Moduler
Är det kanske under moduler man skall lägga in den lagrade proceduren?
///Patrik
BrimbaMedlem sedan dec. 19995 875 inlägg Vänta nu.
Du menar att man skall köra den så att den skapas i databasen.
Det borde ju egentligen bara vara att köra den väl?
Fast det kanske inte fungerar i Access.
Jag vet ju att i SQLServer där har man ju rutor som man bara knapprar in all SQL kod som man vill köra, tex när man skapar tabeller.
///Patrik
BrimbaMedlem sedan dec. 19995 875 inlägg När jag kör frågan för jag följande meddelande:
Syntaxfel i CREATE TABLE-instruktionen.
Det är när jag kör följande kod
CREATE PROCEDURE [min_sp]
@namn varchar(20),
@telefon varchar(20),
@valfritt varchar (200)
AS
INSERT INTO tabInternetKund1
(namn, telefon)
VALUES
(@namn,@telefon)
INSERT INTO tabInternetKund2
(kundID, Valfritt)
VALUES
(@@IDENTITY, @valfritt)
Jag tycker inte att jag skapar några tabeller där.
Några tips?
///Patrik
fredrikMedlem sedan dec. 19991 072 inlägg hej, jag trodde du körde sql-server, men men...
En stored procedure kan du inte köra direkt i asp-sidan utan den lagras och körs i databasen, detta gör att det går mycket snabbare att köra sql-satserna (och även kraftfullare då du kan använda if-satser och variabler).
I access går det inte (vad jag vet) att köra stored procedures, men access kan ha andra motsvarigheter.
Har du inte tillgång till sql-server blir nog alternativet att köra olika sql-kommandon för att lägga in infon.
Det ska iof gå att köra flera sql-kommandon i varann.
Något i stil med:
sql="INSERT INTO tabell1 (namn, telefon) VALUES '"&namn&"','"&telefon&"');INSERT INTO tabell2 (KundID) SELECT kundID FROM tabell1 ORDER BY kundID DESC;INSERT INTO tabell2 (valfritt) VALUES ('"&valfritt&"')"
connection.execute(sql)
Detta borde funka...nu körs alla sql-insert (inklusive att du väljer det högsta kundId från tabell1 dvs det senaste och lägger in) det skulle kanske gå att göra det på ngt lättare sätt med...men detta är vad jag kan komma på nu...
hoppas det inte blev för rörigt...
------------------
Fredrik Klarqvist
fredrik.klarqvist@swipnet.se
www.streetwise.se/fredrik/
BrimbaMedlem sedan dec. 19995 875 inlägg
hoppas det inte blev för rörigt...
Nej verkligen inte!
Nu känner jag lärolusten komma springades till mig som rinnande vatten i en bäck!
Jag förstår faktiskt precis vad du menar nu!
TACK för all hjälp, och med dessa ord tror jag att jag kan lösa det hela.
Jag har tillgång till SQL Server 7.0 men problemet ligger i att jag kör med formulär (Användar gränssnitt) i Access.
När folk kommer in i butiken så kan man välja paket eller enskilda komponenter som jobbar mot access databasen och allt i ett snyggt gränssnitt gjort i Access. Om du inte har jobbat i det kan jag tänka mig att det är svårt att föreställa sig.
Men det är ungefär som Visual Basic :) (väldigt ungefär)
Jag har funderat på att gå över till SQLServer 7 men då får jag kanske ta och bygga hela order systemet i ASP, vilket jag har funderat på starkt på senaste tiden men då tex sökfunktionerna fungerar mycket bättre i Access, den sorterar bort allt som inte tillhör i listan om man skriver in tex, så att drop-down listan blir kortare och kortare, ju mer man skriver in.
Eller när man skall skriva in kunder och veta om det redan finns kunder gör man detta med en gång istället för att ha ett formulär som sedan kollar mot databasen.. jobbigt!
Jag vet att Microsoft har någon komponent som kan kolla mot en databas ungefär som jag beskriver här och "uppdatera" drop-down listan med en gång utan att ladda om sidan, men jag vet inte någon som har använt den komponenten och jag tycker det står väldigt kort beskrivet och få exempel vilket gör att det är lite komplicerat just nu.
Återigen tack för all hjälp, skall prova detta på Måndag
Tack!
///Patrik
malandMedlem sedan nov. 200156 inlägg Jag har gjort en SP, enligt förslaget oven, som ska lägga till info i två tabeller samtidigt. (SQL Server)
CREATE PROCEDURE sp_insert
@projektnamn varchar(50),
@foretagsnamn varchar (50),
@startdatum varchar(20),
@slutdatum varchar(20),
@status varchar(10)
AS
insert into projekt
(projektnamn, startdatum, slutdatum, status)
values
(@projektnamn, @startdatum, @slutdatum, @status)
insert into deltagande_foretag
(foretagsId, projektId)
values
(@foretagsnamn, @@IDENTITY)
GO
Sedan på ASP-sidan står det:
<%
dim utvecklare, proj_ledare, saljare
utvecklare = Request.Form (sctUtvecklare)(1)
Set rsInsert=Server.CreateObject("ADODB.Recordset")
SQL="Exec sp_insert @projektnamn='"&Request.Form("txtProjNamn")&"', @foretagsnamn='"&Request.Form("sctForetagsnamn")&"', @startdatum='"&Request.Form("txtDatum")&"',@slutdatum='"&Request.Form("txtSlutdatum")&"', @status = "&Request.Form("status")&"
rsInsert.Execute(SQL)
%>
Vad har jag gjort för fel? Det funkar inte...
------------------
.: Malin :.