VBDDE
[ Hem ] Allmänt ASP XML SQL ADO HTML CSS VB Java Design Karta
Stränghantering API DDE Nätverk

DDE

1         DDE

För att kommunicera mellan program i Windows kan man använda sig av DDE – Dynamic Data Exchange. Det finns fyra typer av DDE:

1.       Request

Frågar ett efter data av ett annat program (länk)

2.       Execute

Ger DDE kommandon åt ett annat program

3.       Peek

Tittar efter data i ett annat program

4.       Poke

”Trycker in data” i ett annat program

Vi kommer här att se mer på Request och Execute (Peek och Poke tycker jag är ”oartiga”)

1.1        Gemensamt för alla DDE metoder

För att kunna använda DDE krävs samarbete av två program. Ett program fungerar som klient och det andra som server. Eftersom man kan ha flera DDE konversationer igång samtidigt kan ett program vara såväl klient som server samtidigt. För en given DDE konversation gäller dock att programmet är antingen eller. För att få igång en konversation krävs att klienten vet följande om servern:

1.       Application

2.       Topic

3.       Item

Application är det namn som programmet registrerat för DDE. Detta måste inte vara detsamma som programnamnet. För enkelhets skull brukar det dock vara samma som programnamnet.

Topic är ”ämnet” som dataöverföringen skall hantera. Ej alltid helt dokumenterade.

Item är en specifik datamängd, t.ex. en cell i Excel

1.2        DDE med VB 5.0 som klient

De exempel på kod som finns så förutsätter att du har ett standard VB program som har följande komponenter

                        Komponent                  Namn               Egenskaper

            1.         TextBox                        Text1                MultiLine: True

            2.         CommandButton            Command1        Caption: Prova

Dessutom måste du ha igång Excel och ha värden i A1 t.o.m. A3 i arket Sheet1

1.2.1       DDE Request

Den vanligaste formen av DDE är utbyte av data. Det finns tre former av Request. Nedan kommer namnan samt de begrepp som används i VB 5.0 (6.0 har jag inte tillgång till):

                        Verkligt namn                i VB

            1.         Cold                              Manual

            2.         Warm                           Notify               

            3.         Hot                               Automatic


1.2.1.1     Cold DDE Request (manual)

En cold Request går ut på att man tar kontakt, frågar efter data och efter att ha fått datat (eller blivit vägrad) så avbryts förbindelsen. Skriv in följande kod för knappen:

Private Sub Command1_Click()

    Text1.LinkTopic = "Excel|Sheet1"

    Text1.LinkItem = "R1C1"

    Text1.LinkMode = vbLinkManual

    Text1.LinkRequest

End Sub

 

Förklaringar:

Text1.LinkTopic = "Excel|Sheet1"

Ser till att textboxen skapar en DDE kanal mot:

            Application:       Excel

            Topic:               Sheet1

Text1.LinkItem = "R1C1"

Ser till att man sätter:

            Item:                 R1C1

                        Text1.LinkMode = vbLinkManual

            Säger att man skall ha en manuell länk (cold). Obervera att man inte kan sätta denna egenskap före man har satt Applicatioin, Topic och Item

Text1.LinkRequest

Gör att själva förfrågningen görs.

Testa genom att starta programmet och klicka på knappen

Man kan även ställa in LinkTopic ,LinkItem och LinkMode i propertylistan i VB. Då behöver man inte skriva dessa hela tiden. Bäst är det dock att se till att allt blir gjort i koden... Man kan även använda en Label eller PictureBox för DDE kommunikation

1.2.1.2     Warm DDE Request (notify)

Ändra om programmet till följande

Private Sub Command1_Click()

    Text1.LinkTopic = "Excel|Sheet1"

    Text1.LinkItem = "R1C1"

    Text1.LinkMode = vbLinkNotify

    ' Raden Text1.LinkRequest tas bort

End Sub

Skapa sedan följande händelseprocedur (välj Text1 och LinkNotify i Listorna i VB:s editor)

Private Sub Text1_LinkNotify()

    Text1.LinkRequest

End Sub

När vi nu klickar på knappen kommer Text1 att få några inställningar. Det kommer dock inte att komma något värde i textboxen. Om vi hoppar till Excel och skriver om värdet i A1 (R1C1) så kommer vårt program att meddelas om detta. Då körs Text1_LinkNotify  proceduren. I denna säger vi att vi vill ha datat som Excel vill ge. (Vi kan även låta bli om vi vill)


1.2.1.3     Hot DDE Request (automatic)

Ändra om programmet till följande

Private Sub Command1_Click()

    Text1.LinkTopic = "Excel|Sheet1"

    Text1.LinkItem = "R1C1"

    Text1.LinkMode = vbLinkAutomatic

End Sub

Efter detta kommer textboxen att automatiskt uppdateras vid behov och Text1_LinkNotify kommer inte att användas (kan tas bort om man vill)

1.2.2       DDE med VBA  (T.ex. Excel makro) som klient

I övriga VB versioner som t.ex. Excels VBA använd en annan konstruktion för Request, oftast endast cold DDE:

Sub TestRequest()

      Dim channel

      Dim retArray

            channel = DDEInitiate("application", "Topic")

            ' kan ge en array tillbaka

            retArray = DDERequest(channel, "Item")

            ' loopa igenom denna array

            For I = 1 To UBound(retArray)

                  MsgBox retArray(I)

            Next

            ' glöm inte att stänga DDE kanalen

            DDETerminate (channel)

      End Sub

Enklaste sättet att testa DDE är med Excel cellformler. Dessa skrivs i formen:

=Application|Topic!Item

Vi får då en Hot DDE REquest (automatisk). Vill du ha den manuell så kan man använda:

            Edit, Links... Välj länken i dialogen och ändra Update: till Manual

1.3        DDE med VB som Server

För att få en form i VB att fungera som DDE server så måste den ha satt Application, Topic och Item. Dessa är

1.Application                    Namnet på projektet (inte exe filens namn utan det som syns i Project explorern. )

2.Topic                            Ställs in i formens LinkTopic property.

Ändra samtidigt LinkMode till 1- Source

3.Item                              Namnet på en TextBox, Label eller PictureBox

Detta kan testas genom att ställa in LinkTopic till Form1 och LinkMode till Source för formen.

Starta ditt VB program och klicka på dess CommandButton

Hoppa sedan till Excel och skriv in följande formel i en cell, men inte i A1:

=Project1|Form1!Text1

Skriv in någonting i cell A1. Detta kommer att föras över med DDE till vårt VB projekt. Sedan kommer vår Excel formel att hämta detta värde till cellen där den fanns. (En hemsk omväg för datat med det är ju bara en demonstration)


1.4        Nedan kommer en förteckning över DDE topic och item  i några vanliga program:

Microsoft Access

Application

Topic

Item

Förklaring

MSAccess

System

SysItems

Lista över items som finns i System topic

   

Formats

Klippbords format

   

Status

”Busy” eller ”Ready”

   

Topics

Alla öppna databaser

 

Databas

(Namnet på en databas.

T.ex. northwind om filen heter Northwind.mdb)

TableList

Lista över tabeller i databasen

 

QueryList

Alla Query i databasen

 

FormList

Alla formar

 

ReportList

Rapporter

   

MacroList

Makron

   

ModuleList

Moduler

 

databas; TABLE tabellnamn

databas; QUERY query

databas; SQL SELECT * FROM...

T.ex.

mindb; TABLE minTabell

All

Allt data i tabellen inklusive fälltnamn

 

Data

Posterna, men inte fältnamn

 

NextRow

NästaPost.

 

PrevRow

Föregående rad

 

FirstRow

Första raden

 

LastRow

Sista raden

 

FieldCount

Antal poster

För mer info om MS Access som DDE Server se Q89586 i MSKB

eller sök i Access hjälp efter DDE och sedan Using Microsoft Access As a DDE Server

För DDE Execute kan man använda följande:

MSAccess

System

[OpenDatabase databas.mdb]

[OpenForm Formnamn]

[Makronamn parametrar]

Microsoft Word

Application

Topic

Item

Förklaring

Winword

System

SysItems

System Items

   

Formats

Format som Word kan sätta till klippbordet

   

Topics

Alla alternativa topics som finns tillgängliga

 

document

(Namnet på ett dokument.

T.ex. sales.doc)

Bokmärke

Ett bokmärke i texten

(markera en text och välj

Insert, Bookmark...

Skriv in ett namn i dialogen)

För mer info om MS Word som DDE Server se Q93657  i MSKB

För DDE Execute kan man använda följande:

Winword

System

[FileOpen  ....]

(Se Q93657 för mer info)

Microsoft Excel

Application

Topic

Item

Förklaring

Excel

System

SysItems

System Items

   

Formats

Format som kan sättas till klippbordet

   

Selection

 
   

Topics

Alla alternativa topics som finns tillgängliga

 

ark

(Namnet på ett ark.

T.ex. Sheet1)

RnCn

T.ex

R1C1

för A1

Rad nummer och kolumnnummer i formen

R1C2 där 1:an är rad och 2:an är kolumn

 

För DDE Execute kan man använda följande:

Excel

System

??

Man kan göra en hel del med DDE (om man vill)
Prova t.ex.  följande i VB :

Private Sub Command1_Click()

    ' Se till att ha igång Access när du kör detta

    ' byt ut MinDatabas till namnet på den databas du har igång

    ' byt ut ManTabell till en tabell i din databas

    Text1.LinkTopic = "MSAccess|MinDatabas; TABLE MinTabell"

    Text1.LinkItem = "Data"

    Text1.LinkMode = vbLinkManual

    Text1.LinkRequest

End Sub

Du kan även skriva in följande i Excel (för att förtydliga har jag satt extra mellanslag i formeln):

=MSAccess | ' MinDatabas;   TABLE   MinTabell ' ! Data

Skriv in det i en tom cell i början av Excel arket.

Om du får ett värde i cellen så provar du följande:

1.       Markera upp cellen du skrev in formeln i och ett godtyckligt område neråt och åt höger sida:

1

     
       

 

     

2.       Tryck på F2 för att få fram formeln.

3.       Tryck på Ctrl+Shift+Enter

4.       Om det kommer värden i det markerade området kan du prova Klicka på en cell i området du markerade och tryck på F2. Ändra ordet Data till All. Bekräfta med Ctrl+Shift+Enter

5.       Om du vill veta vad som händer kan du söka i hjälpen efter orden Array formula...

  Runda program(?)Nätverk


Om man önskar att ens drömmar ska gå i uppfyllelse är det bäst att man vaknar först

Okänd




Top
< Runda program(?) Nätverk>
© Anders Enges, Vörå 2002  | 22.01.01 17:43 Visa asp koden