Avatar billede per2edb Praktikant
15. august 2010 - 14:30 Der er 12 kommentarer og
1 løsning

MS Access på en aspx side

Jeg har en aspx side med tilgang til en MS access.
Den er indlejret i en Sub Page_Load
Jeg ønsker den direkte på aspx siden - altså uden Sub Page_Load.
Kan i hjælpe på hvordan den skal være Dimet?

<script language="VB" runat="server" >
Sub Page_Load(sender As Object, e As EventArgs) <----- Skal væk
Dim MyConnection As New OleDbConnection()
MyConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Besog.mdb"
Dim strSQL As String = "INSERT INTO Besogende (REMOTE_HOST,Dato) VALUES('" & request.ServerVariables("REMOTE_HOST") & "','" & now() & "')"
Dim objCommand As New OleDbCommand(strSQL, MyConnection)
              MyConnection.Open()
              objCommand.ExecuteNonQuery()
              MyConnection.Close()
End Sub  <----- Skal væk
</script>
Avatar billede keysersoze Guru
15. august 2010 - 14:33 #1
Alt i .NET er baseret på events - hvorfor skal load-eventen væk?
Avatar billede per2edb Praktikant
15. august 2010 - 23:29 #2
Fordi tilgang til DB skal være uafhængig af siden lodes ind.

Nu ved jeg af mange mange års erfaring det næste spørgsmål er hvorfor det .... efter en længere debat glider mit spørgsmål i baggrunden til en diskution der ikke hjælper mig.

Skulle jeg virkelig forklare det i dybten vil det fylde 10 sider om hele programmets struktur der er meget kompleks hvor der er interaktion mellem mange sider og programmer.
Avatar billede per2edb Praktikant
15. august 2010 - 23:35 #3
Jeg glemte - hvis det ikke kan lade sig gøre vil det hjælpe mig kolosalt for så kan jeg agere herudfra - kan det lade sig gøre så venligst hjælp med at sætte de rigtige Dim
Avatar billede keysersoze Guru
15. august 2010 - 23:40 #4
Så vil jeg friste mig selv til at sige at du skal sætte dig lidt mere ind i ASP.NET - der vil altid køre en eller flere events når din side loades, oftest er page_load den rigtige event at håndtere sådanne ting i. Hvis ingen events køres er der ingen kald til siden og så er der slet ikke behov for at eksekvere kode.

Hvis din tilgang til DB skal være uafhængig af at siden loades ind har du et større problem eftersom web er stateless og ikke uden videre kan gemme connections på tværs af sider - skal kode eksekveres mere globalt eller ikke-side-afhængig skal du i stedet have fat på nogle events et helt andet sted, fx i din global.asax.

Hvis du ikke kommer med oplysninger om problemets størrelse er det umuligt at komme med en løsning.
Avatar billede per2edb Praktikant
16. august 2010 - 12:54 #5
Når jeg tilgår siden skal DB kun aktiveres under bestemte forhold, nemlig når min variable Session("Gennemgang")="" .
Den har jeg lagt i en if .. then. Som her vist:

<% If Session("Gennemgang")=""  then %>
    .......
    .......           
<% end if %>

Herindeni virker load eventen ikke - derfor vil jeg have den væk og evt. erstattet af en anden der kan passe ind i if setningen.
Avatar billede keysersoze Guru
16. august 2010 - 13:08 #6
Det er fordi if-sætningen skal foregå inden i eventen;

<script language="VB" runat="server" >
Sub Page_Load(sender As Object, e As EventArgs)
  If Session("Gennemgang")=""  then
    Dim MyConnection As New OleDbConnection()
    MyConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Besog.mdb"
    Dim strSQL As String = "INSERT INTO Besogende (REMOTE_HOST,Dato) VALUES('" & request.ServerVariables("REMOTE_HOST") & "','" & now() & "')"
    Dim objCommand As New OleDbCommand(strSQL, MyConnection)
              MyConnection.Open()
              objCommand.ExecuteNonQuery()
              MyConnection.Close()
  End If
End Sub
</script>

Uden at kende din kode vil det formentlig også være relevant at tjekke for om din session er null.
Avatar billede per2edb Praktikant
16. august 2010 - 17:35 #7
Tak for forslaget. Desværre havde jeg prøvet det som helt naturligt men det virkede ikke. For at være helt sikker på
session har jeg prøvet med  If Session("Gennemgang")<>"Nej".
Det virker heller ikke.
Så vidt jeg kan se slår Sub Page Session "ihjel" det var derfor jeg ville have den ud.
Avatar billede keysersoze Guru
16. august 2010 - 17:57 #8
Der er ingenting udover timeout, nedbrud eller bevidst kode der kan slå en session ihjel - en ekstrem mængde af alle de webapplikationer, der er lavet i .NET ville slet ikke fungere i dag hvis din påstand var korrekt. Der må altså flere informationer på bordet - eller også må du i gang med at debugge gennem Visual Studio.
Avatar billede per2edb Praktikant
18. august 2010 - 11:28 #9
Jeg sender hele aspx siden
Hvad jeg end sætter Session("Gennemgang") til kommer jeg ind i DB selvom IF sætningen skulle styre udenom.
Kan du hjælpe


<%@ Page Language="VB" masterpagefile="APC.master" title="Forside" %>
<%@ Import Namespace="System.Data.OleDb" %>
<asp:Content id="Content1" runat="server" contentplaceholderid="ContentPlaceHolder1">

<%
  Session.Timeout = 120
  Session("Gennemgang")="Nej"
%>
         
<script language="VB" runat="server" >
Sub Page_Load(sender As Object, e As EventArgs)
If Session("Gennemgang")<>"Nej"  then
Dim MyConnection As New OleDbConnection()
MyConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\Besog.mdb"
Dim strSQL As String = "INSERT INTO Besogende (REMOTE_HOST,Dato) VALUES('" & request.ServerVariables("REMOTE_HOST") & "','" & now() & "')"
Dim objCommand As New OleDbCommand(strSQL, MyConnection)
MyConnection.Open()
objCommand.ExecuteNonQuery()
MyConnection.Close()
                         
End If
End Sub
</script>               

</asp:Content>
Avatar billede keysersoze Guru
18. august 2010 - 11:59 #10
Det tyder på at du kommer fra en ældre teknologi fx klassisk ASP?

Sørg for at sætte din session et rigtigt sted - fx også inde i din page_load.
Avatar billede per2edb Praktikant
22. august 2010 - 13:37 #11
Så virker det - tak for hjælpen.
Session skal sættes i Page_Load.
Herudover har du ret, jeg er gået fra ASP til ASPX som jeg har købt MS Expression til inclusive Expression Web, Blend, Designer, Encoder.
Mit livs dårligste investering. Der er f.eks. ingen Basic i Expression WEB!. MS vil have 2000 kr for at hjælpe med at finde det! Og så har jeg endda købt hele pakken - utroligt!.

Foriøvrigt hvad kan Visual Studio 2010 som Expression web ikke kan? Skulle jeg hellere smide møgprogrammerne Expression ud og erstatte dem med Visual Studio? Jeg laver primært web sider i ASPX.
Avatar billede per2edb Praktikant
22. august 2010 - 13:38 #12
Vil du lave det så jeg kan give point
Avatar billede keysersoze Guru
22. august 2010 - 15:02 #13
Jeg har intet kendskab til Expression så kender ikke forskellen - men du kan jo starte med at hente Visual Studio Express hvilket er ganske gratis.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester