Værktøjer fra værktøjskassen Søren Breddam, Stevns Kommune sb@stevns.dk 1stevns kommune
Mapbasic i Stevns Kommune Data Kørsel af planlagte opgaver, så data altid er opdaterede. Logfil til overvågning Dagligt arbejde Produktivitetsfremmende programmer eller funktioner Ofte kun et par linjers kode, som smækkes sammen og køres af en knap, hvoraf flere samles i en mbx Kan også være mere komplicerede rutiner, som jeg aldrig kan huske, når jeg skal bruge dem Tilbagevendende opgaver, som import af CVR eller matrikelkort 2stevns kommune
Produktivitetsfremmende småprogrammer Admin: Her er knapper til alt muligt, og det er derfor kun mig, der kan finde ud af det: Bruger: Her er også knapper til brugerne, og de burde kunne finde ud af det: 3stevns kommune
Opdatering af produktivitetsfremmende småprogrammer, som brugerne har gang i. FIF: Kompiler_Mapbasic.bat køres om natten via Planlagte opgaver : rem @Echo off rem "C:\Program Files (x86)\mapinfo\mapbasic\mapbasic.exe" -NOSPLASH -D "H:\Gis\mbx\Lag\Jordejer.mb" "C:\Program Files (x86)\mapinfo\mapbasic\mapbasic.exe" -NOSPLASH -D "H:\Gis\mbx\Lag\D2M.mb" rem "C:\Program Files (x86)\mapinfo\mapbasic\mapbasic.exe" -NOSPLASH -L "H:\Gis\mbx\Lag\Jordejer.mbp" rem "C:\Program Files (x86)\mapinfo\mapbasic\mapbasic.exe" -NOSPLASH -L "H:\Gis\mbx\Lag\LagMini.mbp" rem "H:\Gis\mbx\Byggesager\Arkiv.mb" "H:\Gis\mbx\Track\Track.mb" rem "C:\Program Files (x86)\mapinfo\mapbasic\mapbasic.exe" -NOSPLASH -L "H:\Gis\mbx\WORtjek\Afloebseksport.mbp" 4stevns kommune
Første lille funktion: Gem udvalg som midlertidig tabel Sub GemTempTable Dim i As Integer, stmpfilename1, sselectiontable As String OnError GoTo OOPS If SelectionInfo(SEL_INFO_NROWS) < 1 Then Print "Intet valgt" Exit Sub End If sselectiontable=selectioninfo(sel_info_selname) stmpfilename1=tempfilename$("") Commit Table sselectiontable As stmpfilename1 TYPE NATIVE Charset "WindowsLatin1" Open Table stmpfilename1 Browse * From TableInfo(0, TAB_INFO_NAME) Her kunne man måske lige tager og lukke sselectiontable?! Exit Sub OOPS: Print Error$() Resume Next End Sub 'GemTempTable 5stevns kommune
Anden lille funktion: Kopier kortobjekt fra en record til en anden: Sub Copy_obj OnError Goto OOPS Fetch First From Selection nyt_obj = Selection.obj OOPS: End Sub Sub Add_obj OnError Goto OOPS Update Selection Set Object = nyt_obj OOPS: End Sub 6stevns kommune
Tredje lille funktion (program): ObjectEdit, som løser opgaven med at redigere kortobjekter Udfordring: Objects Erase Into Target medfører en record uden data! Løsning: Hold styr på den tabel, som du har tænkt dig at redigere med Set Target On -> Her sedittable, hvor antallet af kolonner findes. Herefter dannes kommandoen i runtime: Sub ObjErase Dim sruncmd As String, i As SmallInt OnError GoTo OOPS If NOT SelectionInfo(SEL_INFO_NROWS)=0 AND ltargetset=true Then ltargetset=false sruncmd="objects Erase Into Target Data " For i=1 To TableInfo(sEditTable, TAB_INFO_NCOLS) sruncmd=sruncmd+"col"+i+"=col"+i+"," Next sruncmd=left$(sruncmd,len(sruncmd)-1) Run Command sruncmd End If Exit Sub OOPS: Print Error$() Resume Next End Sub ' 7stevns kommune
Fjerde lille funktion Bufferanalyse Udfordring: Jeg kan aldrig huske syntaksen for en SQL-forespørgsel, som indeholder en bufferanalyse Løsning: Skriv den ind i et program, og pak det lidt ind med en dialogboks If Not gljoin Then Create Table "TmpCombObj" (id Logical) File MyDocs+"\TmpCombObj.tab" TYPE NATIVE Charset "WindowsLatin1" Create Map For TmpCombObj Using SelectionInfo(SEL_INFO_TABLENAME) Create Object As Buffer From Selection Width gibufferafstand Units "m" Resolution 50 Into Table TmpCombObj If gimetode=1 Then srunstring="select * From "+stabname +" Where obj Intersects (Select obj From TmpCombObj) Into Resultattabel Noselect" 'Jaja, det kunne også være "Select * From "+stabname +" Where obj Intersects (Select Buffer(obj, 50, "+gibufferafstand+","m") from Selection) Into Resultattabel Noselect" Else srunstring="select * From "+stabname +" Where obj Within (Select obj From TmpCombObj) Into Resultattabel Noselect" End If Else 'gljoin 8stevns kommune
En større funktion Tabelsammenlægning Udfordring: Tabeller med forskellig struktur kan ikke lægges ordentligt sammen Løsning: Hold styr på tabellernes kolonner via et array Udfordring 2: Når en kolonne er valgt, skal den fjernes fra kolonnearrayet (!) Løsning 2: Peter! Via Unfuddle og via forrige års Mapbasicudviklerdag Declare Sub ARRAYRemoveItemString(arrValues() As String 'Array of values to work on, ByVal nitem As Integer 'Item to remove from the array )'The existing values will be maintained only the given item with will be removed 9stevns kommune
Sub Sub ARRAYRemoveItemString(arrValues() As String, ByVal nitem As Integer) Dim nnumitems, i As Integer OnError GoTo ErrorOccured nnumitems = Ubound(arrValues) If (nitem > 0) AND (nitem < nnumitems) Then For i = nitem To (nnumitems - 1) arrvalues(i) = arrvalues(i + 1) Next Redim arrvalues(nnumitems - 1) ElseIf nitem = nnumitems Then Redim arrvalues(nnumitems - 1) End If Exit Sub ErrorOccured: Print Error$()+ " ARRAYRemoveItemString" End Sub Kommando: Call ARRAYRemoveItemString(marrKolonneInformationer1(), givalgtkolonne) Alter Control CTRL_LST_KOLONNELISTE1 Title From Variable marrkolonneinformationer1 10stevns kommune
Slut Overskuelighed og struktur Kode, der bare vokser Dokumentation Versioner Etc. www.widepond.dk http://www.stevns.dk/borgere/selvbetjening/inf o-paa-kort-gis.aspx 11stevns kommune