Institutionen för Tillämpad fysik och Elektronik Stefan Berglund 2017-07-15 Laboration: Ulrika Åkerlund [email protected] IT-verktyg för ingenjörer ActiveX 2017-07-15 Ulrika Åkerlund Innehållsförteckning 1 Inledning _________________________________________ 2 2 Systembeskrivning __________________________________ 2 3 Implementation ____________________________________ 2 3.1 Allmänt _________________________________________________ 2 3.2 ListView_________________________________________________ 2 3.3 Databaskoppling __________________________________________ 3 3.4 SQL-satsen _______________________________________________ 3 4 Gränssnitt ________________________________________ 4 5 Lösningens begränsningar _____________________________ 4 6 Problem och reflektioner______________________________ 4 7 Referenser ________________________________________ 5 Bilaga: Kod IT-verktyg för ingenjörer Namn på Projekt eller Laboration 1 2017-07-15 Inledning Syftet med laborationen var att lära sig göra en ActiveX-kontroll för sökning i databasen som skapades under första laborationen (Databasdesign). ActivXkontrollen skulle innehålla en lista med resultatet från sökningen. 2 Systembeskrivning Systembeskrivningen för detta lilla projekt blir inte särskilt stort då det endast är en sida som möter användaren. Det finns inga egentliga relationer av intresse. Allt som sker kodmässigt sker under sökknappen. Där hämtas informationen in från de övriga fälten. Inga extra moduler har lagts till. 3 Implementation ActivX-kontrollen är gjord i Visual Basic 6.0. Den är endast testad i Microsft Explorer och Windows. 3.1 Allmänt Grundstegen vid skapandet av en ActiveX-kontroll i VB är följande 1. Öppna VB och välj New Project 2. Välj sedan ActiveX kontroll 3. Skriv in den kod och lägg till de knappar mm du vill ha och när allt fungerar som du vill.. 4. gå in under i menyn och välj Make projektnamn.ocx. 5. Starta programmet Package and Deployment Wizard som bör ligga i katalogen Microsoft visual studio tools. 6. välj den .vbp-fil som du skapat tidigare och tryck sedan på Package 7. Följ anvisningarna i programmet å sen är det bara att ladda upp på nån lämplig server. 3.2 ListView För att få en lätthanterlig lista av sökresultaten har jag använt mig av en extra komponent vid namnet ListView. För att hämta in den markerade jag i Components-listan den post som hette Microsoft Windows Common Controls 6.0. Jag drog sedan ut det objektet och placerade det där jag ville ha det. För att ändra inställningarna för ListView tryckte jag på höger musknapp över objektet och valde sedan properties. Där la jag i kolumnheaders till de namn på kolumnerna jag ville ha. 2 IT-verktyg för ingenjörer Namn på Projekt eller Laboration 2017-07-15 Skriva ut till ListView: Dim itmX As ListItem Set itmX = LstViewResultat.ListItems.Add(, , rs("fi_namn")) itmX.SubItems(1) = latnamn itmX.SubItems(2) = diet itmX.SubItems(3) = omrade itmX.SubItems(4) = sallskap itmX.SubItems(5) = Grupp 3.3 Databaskoppling För att lyckas kommunicera med databasen krävs att man i References lägger till posten Microsoft ActiveX Data Objects 2.0 Library. skapar och öppnar databasen: Dim db_fisken As New ADODB.Connection Dim rs As New ADODB.Recordset db_fisken.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" + txtLocation.Text för att köra ett SQL-kommando: db_fisken.Execute (strSQL) 3.4 SQL-satsen För att sätta ihop den söksträngen som passade in på användarens val använde jag flera if-satser efter varandra. Varje delsak man kunde söka på fick en egen if sats. Om den inte var tom (då vill man få med alla) så lägs en bit till SQL-satsen och samtidigt ettställs variablen flera. Denna variabel används för att veta om ett AND ska läggas till i satsen före eller inte. Dim flera As Integer Dim strSQL As String strSQL = "SELECT * From tbl_fiskar" If txtLatnamn.Text > "" Then If flera = 1 Then strSQL2 = strSQL2 + " AND " End If strSQL = strSQL + " tbl_fiskar.fi_latnamn='" + txtLatnamn.Text + "'" flera = 1 End If 3 IT-verktyg för ingenjörer Namn på Projekt eller Laboration 2017-07-15 If strSQL2 > "" Then strSQL = strSQL + " WHERE" + strSQL2 End If strSQL = strSQL + ";" Anledningen till att SELECT delen och WHERE delen inte sitter ihop är att det då blir fel om man vill visa allt i databasen. 4 Gränssnitt 5 Lösningens begränsningar Vid sökning måste hela fiskens namn skrivas in i fritextfältet för att matching ska ske. Detta skulle kunna lösas med ’*’. Dessutom verkar det som om hantering av tömmning av listan inte existerar om det är EOF vid sökningen. Detta fixas lämpligen genom att tömma listan innan sökning sker. Det skulle dessutom vara trevlig att genom enkel tryckning på rubrik få sortering efter just det fältet. 6 Problem och reflektioner Jag hade en del problem med att lägga ihop SQL-satsen i sökningen innan jag kom till rätta med hur det där med snuttarna /fnuffarna var menade. Men när jag väl insåg att ’ ” & är det tecken som Acess vill ha runt en sträng innebar slut på strängen i tex VB används för att sätta ihop de olika strängarna (även + går bra här) 4 IT-verktyg för ingenjörer Namn på Projekt eller Laboration 2017-07-15 så gick det mesta bra. Jag hade också lite problem med databaskopplingen när den inte längre använder ODBC men lyckades till slut få ordning på även detta. 7 Referenser Tillhandahållet material: N., Holmberg, A., Eriksson. IT-Projekt. Böcker: P.R.M Oliver, N. Kantaris. Programming in Visual Basic for Windows. Great Britain by Cox & Wyman ltd. 1996 5