| VB6 and DDE | |
Posted: Fri Sep 25, 2009 12:11 pm |
Points: 0 |
|
vb6guy |
n00b |
|
|
Joined: 25 Sep 2009 |
Posts: 6 |
|
|
|
|
|
|
|
|
I have downloaded all the Goldmine information on using DDE from FRS and Doug Castell's post and loaded it into my VB6 project. What I have loaded is below. I know this is an old topic but I am not familar with DDE
-------------------------------------------------
Public Function DDERequest(sExpr As String) As String
With txtGMDDE
.LinkItem = sExpr
.LinkRequest
DDERequest = .Text
End With
End Function
Public Function DDEInitiate() As Integer
On Error GoTo Err_DDE
With txtGMDDE
.LinkMode = vbLinkNone
.LinkTopic = "GoldMine|Data"
.LinkMode = vbLinkManual
End With
DDEInitiate = 1
Exit Function
Err_DDE:
If Err = 282 Then
MsgBox "GoldMine is not running! Please launch GoldMine before attempting " & _
"to run this operation.", vbCritical, "DDE Error"
End
Else
Err.Description = "DDE Error:" & Err & " :" & Err.Description
End If
DDEInitiate = 0
End Function
-------------------------------------------------
What I need to know is 1) how to rework the code below to select the current recid (instead of the Sysdir, GoldDir, CommonDir) and 2) how to integrate the recid into my VB6 code - would I just Dim a variable and assign the value returned by DDE? Then use that variable to constrain my Goldmine select statement (select * from Contact1 where recid=dderecid?)
With frmDDE
iReturn = .DDEInitiate
If iReturn Then
sGM_Sysdir = .DDERequest("&sysdir")
sGM_GoldDir = .DDERequest("&golddir")
sGM_Commondir = .DDERequest("&commondir")
End If
End With
-------------------------------------------------
Thanks |
|
|
|
|
| | |
Posted: Fri Sep 25, 2009 12:54 pm |
Points: 0 |
|
DougCastell |
GoldMine Guru |
|
|
Joined: 15 Jun 2006 |
Posts: 1639 |
Location: Los Angeles, CA |
|
|
|
|
|
|
|
Code: |
With frmDDE
iReturn = .DDEInitiate
If iReturn Then
sRedic= .DDERequest("contact1->Recid")
End If
End With |
That ought to do it! |
|
|
|
|
| Follow up question | |
Posted: Fri Sep 25, 2009 2:29 pm |
Points: 0 |
|
vb6guy |
n00b |
|
|
Joined: 25 Sep 2009 |
Posts: 6 |
|
|
|
|
|
|
|
|
Thanks Doug, for the quick response
One more question - where should I place this code in my project
1) in the frmDDE code
2) in the frmIns code (where my ADODB connection is made)
If in the code where I connect to Contact1, where would it be in reference to the connecton to Goldmine?
Let me know if you need any more details
Thanks again |
|
|
|
|
Posted: Fri Sep 25, 2009 5:26 pm |
Points: 0 |
|
DougCastell |
GoldMine Guru |
|
|
Joined: 15 Jun 2006 |
Posts: 1639 |
Location: Los Angeles, CA |
|
|
|
|
|
|
|
Nope, all you need to do is place that WITH statement (like in my post, above) in whatever other area of your project and frmdde will take care of the rest of the dde request to GoldMine. Frances Corazza taught me this technique years ago and I've been using it ever since to read dde from GoldMine. Very handy. |
|
|
|
|
| Still problems selecting Goldmine record with DDE sRedic | |
Posted: Sat Sep 26, 2009 5:19 pm |
Points: 0 |
|
vb6guy |
n00b |
|
|
Joined: 25 Sep 2009 |
Posts: 6 |
|
|
|
|
|
|
|
|
Doug
First, thanks for all your help with this. Unfortunately I am not catching on to what I need to do (which I am sure is due to gaps in my knowledge). But perhaps if I explan what I need to do you can show what to change in my VB6 code
Also feel free to tell me when i have crossed the line into billable work and I will be glad to pay for your time.
What I am doing and why I need the recid:
1. Open a VB 6 form from the external application toolbar icon in Goldmine 8.5
(this works)
2. Read in all Contact1 values using a DSN via an ADODB connection
(this works)
3. Dim variables / populate them with Goldmine values from text boxes on the VB form
(this works)
4. Use the GM values in the variables to create a new contact in another, external database (not a Goldmine database) when I click a command button on the form
(this works)
What I need to do, however, is to limit the GM record that appears in the VB form by recid. Right now, all records appear and I need to scroll to the record I want to write to the second database. I want the record that is the current record in Goldmine to populate the VB form when I open it from the External Application toolbar icon.
I have tried a number of approaches and feel like I have reached the point where I am just using trial and error. I have included the code below.
Thanks again
Code: |
'this is the command button code, dim variables and assignment of GM values
Private Sub cmdIns_Click()
On Error GoTo ErrorHandler
Const adOpenStatic = 3
Const adLockOptimistic = 3
Const adUseClient = 3
Set oConnection = CreateObject("ADODB.Connection")
oConnection.Open "DSN=Goldmine;OLE DB Services=-2"
Dim asCompany(1)
Dim asContact(1)
Dim asFName(1)
Dim asLName(1)
Dim asBAddr1(1)
Dim asBAddr2(1)
Dim asBAddr3(1)
Dim asBCity(1)
Dim asBState(1)
Dim asBZip(1)
Dim asSAddr1(1)
Dim asSAddr2(1)
Dim asSAddr3(1)
Dim asSCity(1)
Dim asSState(1)
Dim asSZip(1)
Dim asPhone1(1)
Dim asPhone2(1)
Dim asEmail(1)
Dim sSQL
Dim lCnt
'***********************************
asCompany(1) = txtFields(1).Text
asContact(1) = txtFields(2).Text
asFName(1) = txtFields(22).Text
asLName(1) = txtFields(3).Text
asBAddr1(1) = txtFields(15).Text
asBAddr2(1) = txtFields(16).Text
asBAddr3(1) = ""
asBCity(1) = txtFields(18).Text
asBState(1) = txtFields(19).Text
asBZip(1) = txtFields(20).Text
asPhone1(1) = txtFields(7).Text
asPhone2(1) = txtFields(8).Text
asEmail(1) = ""
'***********************************
Set oConnection = CreateObject("ADODB.Connection")
oConnection.Open "DSN=QEM Data;OLE DB Services=-2"
For lCnt = 1 To UBound(asFName)
sSQL = "SELECT * FROM Customer WHERE FirstName <> '" & asFName(lCnt) & "' and LastName <> '" & asLName(lCnt) & "' and CompanyName <> '" & asCompany(lCnt) & "'"
Set oRecordset = CreateObject("ADODB.Recordset")
oRecordset.CursorType = 2
oRecordset.LockType = 3
oRecordset.Open sSQL, oConnection
With datPrimaryRS.Recordset
.MoveLast
End With
If (Not oRecordset.EOF) Then
oRecordset.AddNew
oRecordset.Fields("Name").Value = asCompany(lCnt)
oRecordset.Fields("FirstName").Value = asFName(lCnt)
oRecordset.Fields("LastName").Value = asLName(lCnt)
oRecordset.Fields("Contact").Value = asContact(lCnt)
oRecordset.Fields("Phone").Value = asPhone1(lCnt)
oRecordset.Fields("BillAddressCity").Value = asBCity(lCnt)
oRecordset.Fields("BillAddressState").Value = asBState(lCnt)
oRecordset.Fields("BillAddressPostalCode").Value = asBZip(lCnt)
oRecordset.Fields("BillAddressAddr1").Value = asCompany(lCnt)
oRecordset.Fields("CompanyName").Value = asCompany(lCnt)
oRecordset.Fields("AltPhone").Value = asPhone2(lCnt)
oRecordset.Update
End If
Next
'***********************************
'oRecordset.Close
Set oRecordset = Nothing
oConnection.Close
Set oConnection = Nothing
'***********************************
End Sub
_____________________________________________________________________
Private Sub datPrimaryRS_Error(ByVal ErrorNumber As Long, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, fCancelDisplay As Boolean)
'This is where you would put error handling code
'If you want to ignore errors, comment out the next line
'If you want to trap them, add code here to handle them
MsgBox "Data error event hit err:" & Description
End Sub
_____________________________________________________________________
Private Sub datPrimaryRS_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset20)
'This will display the current record position for this recordset
datPrimaryRS.Caption = "Record: " & CStr(datPrimaryRS.Recordset.AbsolutePosition)
End Sub
_____________________________________________________________________
Private Sub datPrimaryRS_WillChangeRecord(ByVal adReason As ADODB.EventReasonEnum, ByVal cRecords As Long, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset20)
'This is where you put validation code
'This event gets called when the following actions occur
Dim bCancel As Boolean
Select Case adReason
Case adRsnAddNew
Case adRsnClose
Case adRsnDelete
Case adRsnFirstChange
Case adRsnMove
Case adRsnRequery
Case adRsnResynch
Case adRsnUndoAddNew
Case adRsnUndoDelete
Case adRsnUndoUpdate
Case adRsnUpdate
End Select
If bCancel Then adStatus = adStatusCancel
End Sub
_____________________________________________________________________
Private Sub cmdClose_Click()
Unload Me
End Sub
|
|
|
|
|
|
| | |
Posted: Mon Sep 28, 2009 11:02 am |
Points: 0 |
|
DougCastell |
GoldMine Guru |
|
|
Joined: 15 Jun 2006 |
Posts: 1639 |
Location: Los Angeles, CA |
|
|
|
|
|
|
|
|
|
|
|
ContactReview Forum Index » GoldMine Coders
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
All times are GMT - 7 Hours
Page 1 of 1
|
|
|
Brought to you by Castell Computers, Doug Castell, Admin
Powered by phpBB © 2001-2004 phpBB Group Theme created by Vjacheslav Trushkin
|