webForumDet fria alternativet

MySQL - En djungel?

ASP

40 svar · 1 652 visningar · startad av oskars

Medlem sedan nov. 20051 317 inlägg
Frågan#1

Hej på er! Dimma och grejer på morgonen nu för tiden och man märker att man inte är helt på G i kroppen när man känner att halsen reagerar när man pratar på jobbet... usch, jobbigt. Hur som helst...

Jag försöker gå över till MySQL från Access... ooooh yes! Kände mig riktigt odödlig där ett tag. "Kul" tyckte jag... och sen "Ojdå, det verkar ju jättelätt!"... och sen "Ajdå, så lätt var det inte visst! Typiskt!". Eftersom MySQL är mer standard än Access så tänkte jag ändå försöka lära mig det. Tyvärr fungerar inte böcker för mig då jag aldrig tar mig tid att läsa. Internet är det absolut bästa läroverktyget för mig.

Som jag skrev ovan så arbetar jag för tillfället i Access (tillsammans med ASP).

Saker jag lyckats med i mina MySQL-äventyr:

  1. Installera EMS MySQL Manager. I detta programet hanterar jag min mysqldatabaser och skapar tabeller etc.
  2. Skriva ut data från databasen. Kan loopa precis som jag gör med access och det där med MoveNext etc.
  3. Skriva in data med hjälp av INSERT.

Och självklart så har jag några problem i mina MySQL-äventyr:

  1. Så som jag lägger till data i databasen med Access tycker jag är fruktansvärt smidigt. Det kan inte gå fel liksom. Så här gör jag: RecSet.AddNew RecSet("Namn") = Request.Form("Namn") RecSet.Update... Det kan inte bli enklare... Och den bilden jag fått av MySQL säger mig att det inte går att göra så här längre... tyvärr... Om svaret är att "Nej, du kan inte göra så längre!"... Se nästa punkt!
  2. Jag vet ju hur man skriver in data i 1st fält i min databas på korrekt sätt i MySQL... MEN... jag kommer få väldigt långa SQL-frågor om jag ska skriva allting på en rad och det kan lätt bli fel för mig som inte är van etc. Jag skulle vilja se ett exempel på hur jag kan göra det enkelt för mig här! Samma sak gäller även för att ÄNDRA poster i databasen. Ska visa lite exempel här nedan... Översikt i SQL-frågorna är viktigt.

Så här skriver jag in data för tillfället till Access:

Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("databasen")

Set RecSet = Server.CreateObject("ADODB.Recordset")
RecSet.Open "Select * From tblLankar", Connect, 3, 3

link = Request.Form("url")
link = Replace(link, "&","$")

	RecSet.AddNew

		RecSet("Namn") = Request.Form("namn")
		RecSet("URL") = link
		RecSet("Text") = Request.Form("kommentar")
		RecSet("Kategori") = Request.Form("kategori")
		RecSet("Hits") = 0
		RecSet("Datum") = Date
		RecSet("Tid") = Time

	RecSet.Update

RecSet.Close
Set RecSet = Nothing
Connect.Close
Set Connect = Nothing

Så här har jag fått lära mig att man lägger till data i 1st fält till MySQL:

SQL2 = "INSERT INTO MySQLtest (Meddelande1) VALUES ('" & Now & "'),(Meddelande2) VALUES ('" & Now & "')"
Connect.Execute(SQL2)

Mitt problem börjar här! Jag vill ju lika smidigt som jag visade i Access-exemplet ovan lägga till massor av data i en post i databasen... men det blir lätt rörigt i sql-frågan till MySQL tycker jag! Lätt att det kan bli fel och sådär!

Fråga till ovanstående stycke:
Vill ni visa mig hur jag ska skriva för att kunna få långa SQL-frågor, där mkt data ska in i databas i många fält, att bli översiktig?

En annan fråga
Måste jag använda olika koder för INSERT och UPDATE? Kan jag t.ex uppdatera en post med hjälp av INSERT INTO MySQLtest WHERE ID = 1 t.ex?

Syftet med denna tråden är ju så klart att lätta dimman för mig själv i MySQL-världen, men den blir även ett perfekt tillskott sen när andra kommer och är lika mkt MySQL-nybörjare som jag :D Hoppas det inte blev för lång inledning!

Tacksam för hjälp :)

:bire

Mvh Oskar

Medlem sedan mars 2001363 inlägg
#2

Nu håller jag inte på med ASP, utan PHP... men jag skulle gjort:
SQL2 = "INSERT INTO MySQLtest (Meddelande1, Meddelande2) VALUES ('" & Now & "', '" & Now & "')"

Vill passa på att tips om den här boken, som jag tyckte var upplysande:
http://www.bokus.com/b/9163608308.html

Medlem sedan nov. 20051 317 inlägg
#3

Prometheus skrev:

Nu håller jag inte på med ASP, utan PHP... men jag skulle gjort:
SQL2 = "INSERT INTO MySQLtest (Meddelande1, Meddelande2) VALUES ('" & Now & "', '" & Now & "')"

Tack för ditt tips där! Men om jag har låt oss säga 20st fält som ska fyllas i så blir det ganska rörigt =) Förstår du mig?

Kan man göra på annat sätt?

Medlem sedan mars 20023 561 inlägg
#4

Precis som Prometheus säger så skrivs inte sql-insertstatements som du har gjort ovan...

Korrekt syntax:

INSERT INTO [i]tabellen[/i] ([i]kolumnnamnen (kommaseparerade)[/i]) VALUES([i]kolumnvärdena (kommaseparerade)[/i])

/edit: Lite sent. :r

Har för mig att du kan göra på samma sätt mot en MySQL-db som mot en access. Dock har jag aldrig använt det förstnämda.

Medlem sedan nov. 20051 317 inlägg
#5

Josef skrev:

Precis som Prometheus säger så skrivs inte sql-insertstatements som du har gjort ovan...

Korrekt syntax:

INSERT INTO [i]tabellen[/i] ([i]kolumnnamnen (kommaseparerade)[/i]) VALUES([i]kolumnvärdena (kommaseparerade)[/i])

/edit: Lite sent. :r

Har för mig att du kan göra på samma sätt mot en MySQL-db som mot en access. Dock har jag aldrig använt det förstnämda.

Perfekt där med dom exakta förklaringarna! Tack!

Men min fråga i mitt föregående inlägg.. Säg att jag har 20st fält som ska fyllas i... det blir ganska långt då =)

Medlem sedan nov. 2004112 inlägg
#6

Blev ganska långt i Access med tycker jag. :) Dela upp din SQL-sats på flera rader så blir det överskådligare.

Medlem sedan nov. 20051 317 inlägg
#7

HenrikAI skrev:

Blev ganska långt i Access med tycker jag. :) Dela upp din SQL-sats på flera rader så blir det överskådligare.

Långt fast fint och överskådligt =)

Får jag göra så här?

("INSERT INTO" &_
"TABELLEN(namn, URL, Text, Kategori, Hits, Datum, Tid)" &_
VALUES '"&namn&"', '"&link&"', '"&kommentar&"', "&kategori&", "&hits&", '"&Tid&"')")"
Medlem sedan sep. 2006462 inlägg
#8

MySQL

fel

Medlem sedan juni 200032 967 inlägg
#9

oskars skrev:

Får jag göra så här?

Nja. Du får inte använda php-taggar till asp-kod, till att börja med, det bara förstör läsbarheten (och i vissa fall också förändrar koden mellan taggarna). Du måste också ha mellanslag mellan & och h. Du måste ha whitespace efter into, och gärna på lite andra ställen också. Alla kommaseparerade värden skall ligga i en parentes efter values. Jag hade, för enkelhet och överskådlighet, lagt SQL-frågan i en variabel.

sSQL = "INSERT INTO " & _
       "TABELLEN (namn, URL, Text, Kategori, Hits, Datum, Tid) " & _
       VALUES ('" & namn & "', '" & link & "', '" & kommentar & "', " & _
       kategori & ", " & hits & ", '" & Tid &"')"

Jag hoppas också att du tänker på SQL injection och byter namn på fältet text (det är ett reserverat ord).

Mvh

Medlem sedan nov. 20051 317 inlägg
#10

Jeppewebb, vadå "fel"?

@nders skrev:

Nja. Du får inte använda php-taggar till asp-kod, till att börja med, det bara förstör läsbarheten (och i vissa fall också förändrar koden mellan taggarna). Du måste också ha mellanslag mellan & och h. Du måste ha whitespace efter into, och gärna på lite andra ställen också. Alla kommaseparerade värden skall ligga i en parentes efter values. Jag hade, för enkelhet och överskådlighet, lagt SQL-frågan i en variabel.

sSQL = "INSERT INTO " & _
       "TABELLEN (namn, URL, Text, Kategori, Hits, Datum, Tid) " & _
       VALUES ('" & namn & "', '" & link & "', '" & kommentar & "', " & _
       kategori & ", " & hits & ", '" & Tid &"')"

Jag hoppas också att du tänker på SQL injection och byter namn på fältet text (det är ett reserverat ord).

Mvh

Jaha, åfan! Trodde du menade att jag använda PHP-kod... men nu förstod jag ju såklart att du mena när jag skrev inlägget här på wF!

Tackar och bugar för din hjälp med hur man kunde dela upp SQL-frågan! Jag har sql-frågan i en variabel. Skrev bara inte ut den.

Nu har jag en liten fråga:
Med den INSERT-frågan... kan jag välja att lägga in den information i ett ID som redan finns? liksom INSERT INTO MinTabell WHERE ID = "& Request.Querystring("ID") %"... Går det? :r

Medlem sedan juni 200032 967 inlägg
#11

Med den INSERT-frågan... kan jag välja att lägga in den information i ett ID som redan finns? liksom INSERT INTO MinTabell WHERE ID = "& Request.Querystring("ID") %"... Går det?

Nej, då är det UPDATE som gäller.

UPDATE tabell SET fält1 = 'foo', fält2 = 'bar', fält3 = 'foobar' WHERE ID = 4711
Medlem sedan nov. 20051 317 inlägg
#12

@nders skrev:

Med den INSERT-frågan... kan jag välja att lägga in den information i ett ID som redan finns? liksom INSERT INTO MinTabell WHERE ID = "& Request.Querystring("ID") %"... Går det?

Nej, då är det UPDATE som gäller.

UPDATE tabell SET fält1 = 'foo', fält2 = 'bar', fält3 = 'foobar' WHERE ID = 4711

Ånej, tycker det blir så krångligt alltihopa :q Eller jag vet inte....... Mitt problem är väl att jag har börjat bygga på en grej som jag för tillfället kör med Access... och funderar på hur övergången till MySQL ska gå... Tror du att jag kan klara av det? Det är så smidigt med det jag kör nu med Access... jag behöver inte ha olika frågor, som MySQL har, för INSERT och UPDATE... Kör ju bara med RecSet.Update... riktigt smidigt. Finns det något liknande för MySQL, eller is this the way to go? Is it either MySQL's way, or the highway? Oooh, jag droppar feta engelska rader här... Hur som helst :)

Medlem sedan juni 200032 967 inlägg
#13

Krångligt?

Det är bara att lära sig rätt från början. Använd INSERT och UPDATE för Access också så blir övergångsproblemen mindre.

Mvh

Medlem sedan nov. 20051 317 inlägg
#14

Hehe ja jo, du har så rätt snabelA-nders!

Fast HALLÅ! Åhå :q OMG! :e Nu klarnar det :D Frågan jag ställer i mitt program handlar ju bara om att jag ska UPPDATERA... inte lägga till något.. Så då är det ju UPDATE jag ska köra med när jag ska börja byta ut frågorna :D :stud :i :bire

Underbart! Tack 4nders!

Medlem sedan mars 200650 inlägg
#15

Tips om du inte hittat: http://dev.mysql.com/doc/refman/5.1/en/

Medlem sedan nov. 20051 317 inlägg
#16

Dev Null skrev:

Tips om du inte hittat: http://dev.mysql.com/doc/refman/5.1/en/

Tack så mycket för länken :D :bire

Medlem sedan nov. 20051 317 inlägg
#17

Håller på att byta om till MySQL nu och det fungerar väldigt bra =) Jag förstår mig på det mer och mer! Jag använder denna tråden som referens titt som tätt och det funkar skitbra! Tack så mycket för allt hjälp!

Men nu har jag problem med att få min paging att fungera... Har ingen som helst aning om hur jag ska göra för att åtgärda det. Någon som skulle vilja hjälpa mig?

Får detta felet:
ADODB.Recordset (0x800A0CB3)
Aktuellt Recordset stöder inte bokmärken. Det kan bero på en begränsning av providern eller den valda markörtypen.

Medlem sedan nov. 20051 317 inlägg
#18

Hej vänner! Det bästa måste vara att besvara sina egna frågor :D

Jag sökte på... gissa vad... jo precis... Google(!)!

Hittade en schysst norsk sida som går igenom hur man gör en MySQL-paging med ASP!

Här har ni andra som undrar samma sak som jag:

Hur man gör MySQL-paging i ASP:
http://activedeveloper.dk/articles/279/

Medlem sedan mars 20041 505 inlägg
#19

Men alltså paging med ADO och MySQL skiljer sig knappt någonting alls jämfört med Access.
Det viktiga är att man sätter CursorLocation till 3 innan man öppnar sitt recordset, så att man får tillgång till egenskaperna PageSize, AbsolutePage, PageCount mfl.

Medlem sedan nov. 20051 317 inlägg
#20

Hehe, ja ja, nu bytte jag paging helt och hållet... va det knäppt kanske :D

Jag har en fråga som är viktig:

Detta meddelandet får jag när jag försöker lägga in lite grejer i databasen OM Request.Form("Order") = 1:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[MySQL][ODBC 3.51 Driver][mysqld-5.0.24a-community-nt]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Avbetalning = '300', Losen = '1', Betvillkor = '1', Frakt = '1', Levtid = '1-2ve' at line 1

SQL-Frågan:

Set Recset = Server.CreateObject("ADODB.Recordset")
SQL = "
UPDATE Adresser2006 SET 

GS = 0, 
KOrder = 1, 
Orderdatum = '"&Kontaktdatum&"', 
Losen = '"& Request.Form("losen") &"', 
Betvillkor = '"& Request.Form("betvillkor") &"', 
Avbetalning = '"& Request.Form("avbetalning") &"', 
Frakt = '"& Request.Form("frakt") &"', 
Ordernotering = '"& Request.Form("orderOvrigt") &"', 

Produkt1 = '"& Request.Form("produkt1") &"', 
Antal1 = "& Request.Form("antal1") &", 
Storlek1 = '"& Request.Form("storlek1") &"', 
Pris1 = "& Request.Form("pris1") &", 
Produkt2 = '"& Request.Form("produkt2") &"', 
Antal2 = "& Request.Form("antal2") &", 
Storlek2 = '"& Request.Form("storlek2") &"', 
Pris2 = "& Request.Form("pris2") &", 
Produkt3 = '"& Request.Form("produkt3") &"', 
Antal3 = "& Request.Form("antal3") &", 
Storlek3 = '"& Request.Form("storlek3") &"', 
Pris3 = "& Request.Form("pris3") &", 
Produkt4 = '"& Request.Form("produkt4") &"', 
Antal4 = "& Request.Form("antal4") &", 
Storlek4 = '"& Request.Form("storlek4") &"', 
Pris4 = "& Request.Form("pris4") &", 
Produkt5 = '"& Request.Form("produkt5") &"', 
Antal5 = "& Request.Form("antal5") &", 
Storlek5 = '"& Request.Form("storlek5") &"', 
Pris5 = "& Request.Form("pris5") &", 
Produkt6 = '"& Request.Form("produkt6") &"', 
Antal6 = "& Request.Form("antal6") &", 
Storlek6 = '"& Request.Form("storlek6") &"', 
Pris6 = "& Request.Form("pris6") &", 

Foretag = '"& Request.Form("foretag") &"' 
WHERE ID = "& Request.Form("id") &""

Connect.Execute(SQL)
Set RecSet = Nothing

Tabellen som innehåller alla ovanstående fälten:

<table class="orderTable" width="100%">
	<tr>
		<td colspan="4">
                           <select name="leveranstid" id="leveranstid" style="width:70px;">
				<option selected>Lev.tid:</option>
				<option></option>
				<option value="1-2veckor">1-2 veckor</option>
				<option value="2-4veckor">2-4 veckor</option>
				<option value="2-6veckor">2-6 veckor</option>
				<option value="4-6veckor">4-6 veckor</option>
			</select>
			Lösen: <input name="losen" type="text" class="orderPris" />
			Bet. villk.: <input name="betvillkor" type="text" class="orderPris" />
			Frakt: <input name="frakt" type="text" class="orderPris" />
		</td>
	</tr>
	<tr>
		<td width="250">Produkt</td>
		<td width="20" align="center">Strl</td>
		<td width="20" align="center">St</td>
		<td width="10">Pris</td>
	</tr>
	<tr>
		<td>
			<input name="produkt1" type="text" value="<%=RecSet("Produkt1")%>" class="orderinput" />
		</td>
		<td>
			<input name="antal1" type="text" class="orderAntal" />
		</td>
		<td>
			<input name="storlek1" type="text" class="orderStorlek" />
		</td>
		<td>
			<input name="pris1" type="text" value="<%=RecSet("Pris1")%>" class="orderPris" />
		</td>
	</tr>
	<tr>
		<td>
			<input name="produkt2" type="text" value="<%=RecSet("Produkt2")%>" class="orderinput" />
		</td>
		<td>
			<input name="antal2" type="text" class="orderAntal" />
		</td>
		<td>
			<input name="storlek2" type="text" class="orderStorlek" />
		</td>
		<td>
			<input name="pris2" type="text" value="<%=RecSet("Pris2")%>" class="orderPris" /><br />
		</td>
	</tr>
	<tr>
		<td>
			<input name="produkt3" type="text" value="<%=RecSet("Produkt3")%>" class="orderinput" />
		</td>
		<td>
			<input name="antal3" type="text" class="orderAntal" />
		</td>
		<td>
			<input name="storlek3" type="text" class="orderStorlek" />
		</td>
		<td>
			<input name="pris3" type="text" value="<%=RecSet("Pris3")%>" class="orderPris" /><br />
		</td>
	</tr>
	<tr>
		<td>
			<input name="produkt4" type="text" value="<%=RecSet("Produkt4")%>" class="orderinput" />
		</td>
		<td>
			<input name="antal4" type="text" class="orderAntal" />
		</td>
		<td>
			<input name="storlek4" type="text" class="orderStorlek" />
		</td>
		<td>
			<input name="pris4" type="text" value="<%=RecSet("Pris4")%>" class="orderPris" /><br />
		</td>
	</tr>
	<tr>
		<td>
			<input name="produkt5" type="text" value="<%=RecSet("Produkt5")%>" class="orderinput" />
		</td>
		<td>
			<input name="antal5" type="text" class="orderAntal" />
		</td>
		<td>
			<input name="storlek5" type="text" class="orderStorlek" />
		</td>
		<td>
			<input name="pris5" type="text" value="<%=RecSet("Pris5")%>" class="orderPris" /><br />
		</td>
	</tr>
	<tr>
		<td>
			<input name="produkt6" type="text" value="<%=RecSet("Produkt6")%>" class="orderinput" />
		</td>
		<td>
			<input name="antal6" type="text" class="orderAntal" />
		</td>
		<td>
			<input name="storlek6" type="text" class="orderStorlek" />
		</td>
		<td>
			<input name="pris6" type="text" value="<%=RecSet("Pris6")%>" class="orderPris" /><br />
		</td>
	</tr>

	<tr>
		<td colspan="4" valign="top">Avbetalning:
			<input name="avbetalning" type="text" value="<%=RecSet("Avbetalning")%>" class="input" style="width:30px;" />kr/mån
		</td>
	</tr>

	<tr>
		<td colspan="4">
			Företag: <input name="foretag" type="text" class="input" style="width:100px;" />
			Pacsoft: <input type="checkbox" name="pacsoft" value="1" /> <input name="paketinnehall" type="text" style="width:101px;" />
		</td>
	</tr>
	<tr>
		<td colspan="4">
			Övriga noteringar:<br />
			<textarea name="orderOvrigt" rows="4" cols="39" /></textarea>
		</td>
	</tr>
</table>
491 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
121 ms — deklarationer (db)
126 ms — hämta statistik (db)
147 ms — hämta tråd, inlägg och bilagor (db)
216 ms — ändringar (db)