Jag undrar hur jag enklast gör för att kunna köra min databas som är skriven i access utan att ha access installerat. Jo, jag vet att det ska gå bra att bara ha runtime installerat men dels så krockar det med en annan databas som är installerad som även den kör access och dels så undrar jag hur jag får bort frågan "Du håller på att lägga till en post. Vill du verkligen göra detta?" så fort någon lägger in något i databasen. Det är ju något som man gör i Access under "Alternativ", "Redigera, sök" och "Bekräfta poständringar" men det följer ej med när man kör databasen fristående. <b>Jag undrar hur jag enklast gör för att kunna köra min databas som är skriven i access utan att ha access installerat. Ahhh.. vilken sabla jobbig bugg det finns här på pellesoft.. Det går inte att skriva en massa i meddelandefältet och sedan kika på något annat ( i det här fallet "utforskaren") för att sedan fortsätta skriva... Då försvinner allt man skrivit.... bugg!!! För insert frågor: NEJ, jag använder inte macro. Jag använder VB som är inbyggt i access. Här är ett exempel: Prova om... Koden: Första felet, lägg till referens till Microsoft DAO 3.6 Alltså, jag är ju riktigt grön när det gäller access så jag måste ju dessvärre fråga var jag hittar DAO 3.6 så att jag kan lägga till referens.. >var jag hittar DAO 3.6 så att jag kan lägga till referens.. DoCmd.RunSQL är en funktion som används när du konvertera Makro till kod. Det är alltså som om du körde makro instruktionen fast i VB kod. Jag tror den till och med anropas när ett makro exekveras. Med "DoCmd.SetWarnings False/True" kan avaktivera resp aktivera varningarna. Ett stort tack till er alla för all hjälp! Speciellt tack till Andreas till det långa och utförliga svaret! Än så länge så har jag bara slagit av och på felmeddelanden och jag tog några av dina exempel. La t.ex. in meddelanden på alla ställen som bekräftar inmatningar. Mycket bra.. Jag kommer helt klart att göra om mer saker så att det blir mer användarvänligt. Att göra en databas fristående från Access
Finns det någon lathund för hur jag kör en databas fristående via Access runtime?Sv: Att göra en databas fristående från Access
Jo, jag vet att det ska gå bra att bara ha runtime installerat men dels så krockar det med en annan databas som är installerad som även den kör access.</b>
På vilket sätt krockar det? Är det olika versioner av Access runtime?
<b>Så undrar jag hur jag får bort frågan "Du håller på att lägga till en post. Vill du verkligen göra detta?" så fort någon lägger in något i databasen. Det är ju något som man gör i Access under "Alternativ", "Redigera, sök" och "Bekräfta poständringar" men det följer ej med när man kör databasen fristående.
</b>
Hur lägger du till data i databasen? Med en insertfråga eller liknande? För detta är inget som jag känner igen när man fyller i data i formulär i access.
<b>Finns det någon lathund för hur jag kör en databas fristående via Access runtime?</b>
Jag känner tyvärr inte till någon.Sv:Att göra en databas fristående från Access
<b>På vilket sätt krockar det? Är det olika versioner av Access runtime?</b>
på vissa datorer så vill inte min databas starta om jag inte stänger den andra först. Sedan kan jag starta den andra.
På vissa datorer så startar installationen av office även fast jag installerat runtime.
På vissa datorer så startar min databas inom samma fönster som den tidigare databasen.
<b>Hur lägger du till data i databasen? Med en insertfråga eller liknande? För detta är inget som jag känner igen när man fyller i data i formulär i access.</b>
Jo, jag använder insert för att lägga in poster. jag är inte ensam om att ha detta "problem" Hittade info om detta på nätet men som sagt så funkar det bara om man har access installerat och inte bara runtime.
Går det inte (på ett enkelt sätt) att starta min databas på något annat sätt än att starta själva mdb-filen?Sv: Att göra en databas fristående från Access
Dyu använder Makro kod det är inte "rätt" sätt. Du bör istället använda ADO eller DAO för att utföra dina frågor. Det finns exemple på detta i forumet.
Jag avråder dig från att använda macro utan det är bettre att istället skriva VB kod.
Det är en betydligt högre inkörströskel men då får en bättre möjlighet att skriva applikationer.Sv:Att göra en databas fristående från Access
<code>
Private Sub sparaPost_Click()
Dim sqlString As String
sqlString = "INSERT INTO ledare (ledare) VALUES (nyLedare)"
DoCmd.RunSQL (sqlString)
</code>Sv: Att göra en databas fristående från Access
<code>
Private Sub sparaPost_Click()
Dim sqlString As String
dim db as database
set db = currentdb
sqlString = "INSERT INTO ledare (ledare) VALUES (nyLedare)"
db.execute(sqlString)
</code>
...gör någon skillnad.
/F
Edit:
<code>
docmd.setwarnings=false
docmd.runsql sqlString
docmd.setwarnings=true
</code>
Borde ta bort frågorna vid varje ändring..
Edit2:
Och om jag minns rätt så är DoCmd i princip samma sak som att köra ett Access-makro..
Edit3:
Men Hillqvist har rätt, använd DAO (mitt översta exempel) eller ADO istället..Sv:Att göra en databas fristående från Access
<code>
Private Sub sparaPost_Click()
Dim sqlString As String
dim db as database
set db = currentdb
sqlString = "INSERT INTO ledare (ledare) VALUES (nyLedare)"
db.execute(sqlString)
</code>
visar följande felmeddelande:
Kompileringsfel:
Egendefinierad typ har inte definierats.
Och det är "db As database" som kompilatorn hakar upp sig på.
<code>docmd.setwarnings=false
docmd.runsql sqlString
docmd.setwarnings=true</code>
ger följande fel:
"Kompileringsfel:
"Argumentet är inte valfritt
och det är på ".SetWarnings" den hakar sig.Sv: Att göra en databas fristående från Access
Andra felet, ska vara utan =-tecken
:)Sv:Att göra en databas fristående från Access
Utan =-tecken så gick det alldeles utmärkt! ;)
Varför ska jag använda mig av DAO? Jag är som sagt grön....Sv: Att göra en databas fristående från Access
Öppna en modul. I menyn Verktyg->Referenser, leta upp "Microsoft DAO 3.6..." Och kryssa i den. =)Sv: Att göra en databas fristående från Access
Vad du vill åstakomma är alltså att infoga en Ledare i tabellen Ledare från textrutan nyLedare?
nyLedare är en annonym parameter. Man kan tydlig typspecificera parametrar:
PARAMETERS nyLedare Text ( 50 );
INSERT INTO ledare ( ledare )
VALUES (nyLedare);
DoCmd.RunSQL() funktionen innehåller intiligens vad det gäller parametrar. Metoden läser ut om det finns några parametrar försöker sedan matcha detta mot "miljön", om det finns några kontroller som heter lika dant som namnet.
Jag antar att det är detta du gör och att du därmed har en Textbox som heter nyLedare.
Om detta saknas kommer RunSQL att visa en egen dialog där den frågar användaren om värdet.
Jag rekommenderar då att du använder en typspcificerar dina parametrar. Då det tydlig framgår vad som är fält och vad som är parametrar.
För att köra frågor rekommenderar jag att du använder ADO framför DAO. Detta då du underlättar för dig om du senare väljer att migrera till projekt till SQL server.
Din kod skriver du i så fall så här:
Dim cmd As ADODB.Command
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandText = "INSERT INTO ledare (ledare)" + vbCrLf + _
"VALUES (?)"
cmd.Parameters.Append cmd.CreateParameter("nyLedare", adVarChar, adParamInput, LedareMaxLängd, nyLedare.Value)
cmd.Execute
Men något som är viktigt när du kodar är felhantering. Om ett fel skulle uppstå, tänkbara fel kan vara:
* Glömt ange ett värde/lämnat textrutan tom
* Värdet finns redan/index hindrar dubletter t.ex. det är en primärnyckel
* Du har angivit ett för långt värde, verstiger fältets längd. I detta fallet 50 tecken.
Kommer din applikation krascha om du hör i Runtime läge.
Detta kan du förhindra genom att kontrollera värdet och fånga felmedelande. Du bör dessutom Hantera varje fel på ett användarvänlig tillväga gångssätt. T.ex. Visa en dialog som talar om orsak, kosekvens och hur användare skall korigera det. Samt t.ex. flytta markör/fokus till källan:
Private Sub sparaPost_Click()
Dim cmd As ADODB.Command
On Error GoTo sparaPost_Click_Err
If IsNull(nyLedare.Value) Then
MsgBox "Du har har inte angivit något namn på ledaren." + vbCrLf + _
"Ange ett namn och försök igen ", vbInformation
nyLedare.SetFocus
ElseIf Len(nyLedare.Value) >= LedareMaxLängd Then
MsgBox "Längden på ledarens namn får inte överstiga " & LedareMaxLängd & "." + vbCrLf + _
"Försök igen med ett kortare namn på din ledare.", vbExclamation
nyLedare.SetFocus
Else
Set cmd = New ADODB.Command
Set cmd.ActiveConnection = CurrentProject.Connection
cmd.CommandText = "INSERT INTO ledare (ledare)" + vbCrLf + _
"VALUES (?)"
cmd.Parameters.Append cmd.CreateParameter("nyLedare", adVarChar, adParamInput, LedareMaxLängd, nyLedare.Value)
cmd.Execute
MsgBox "Du har nu sparat """ & nyLedare & """ till databasen", vbInformation
End If
sparaPost_Click_Exit:
Exit Sub
sparaPost_Click_Err:
Select Case Err.Number
Case -2147467259 'would create duplicate values in the index, primary key, or relationship.
MsgBox """" & nyLedare & """ finns redan en ledare sparad." + vbCrLf + _
"Försök igen med ett annat värde.", vbExclamation
nyLedare.SetFocus
Resume sparaPost_Click_Exit
Case Else
MsgBox Err.Description, vbCritical, Err.Source
Resume sparaPost_Click_Exit
End Select
End Sub
Detta är betydligt mer kod än vad du använde för början. Så varför skall du göra på detta sättet?
Svaret är enkelt.
Du höjer kvaliteten i form av användarvänlighet, felmedelandenan från RunSQL är kryptiska för en användare.
Det är viktigt hur användare förstår och upplever din applikation. Om de inte förstår din applikation kommer de ge fler suportärende och användare kommer att bli frustrerade. Upplever de din applikation som jobbig att använda så kommer det int anlita dig igen eller tala illa om din applikation.
Du tjänar på att tillhandahålla en användarvänlig applikation.
Sv: Att göra en databas fristående från Access
Om du vill göra det med din kod men slippa varningen kan du skriva så här
<code>
Dim sqlString As String
DoCmd.SetWarnings False 'Avaktiverar eventuella varningar
sqlString = "INSERT INTO Tabell1 (Namn) VALUES ('Namn1')"
DoCmd.RunSQL (sqlString)
DoCmd.SetWarnings True 'Aktiverar eventuella varningar (om du vill)
</code>Sv:Att göra en databas fristående från Access
Sv:Att göra en databas fristående från Access