On Sun, Jul 14, 2013 at 3:18 PM, Adam Nicholls <inkysplat@xxxxxxxxx> wrote: > > Richard - I've tried that I get an error about it not being defined as > property of the object. > > Andrew - do you mean try using the method Richard has shown? > > Cheers > Adam. > > On 13 July 2013 17:11, Richard Quadling <rquadling@xxxxxxxxx> wrote: > > > > > > > > On 13 July 2013 01:24, Andrew Ballard <aballard@xxxxxxxxx> wrote: > >> > >> On Jul 12, 2013 4:53 AM, "Adam Nicholls" <inkysplat@xxxxxxxxx> wrote: > >> > > >> > Hi Guys/Gals, > >> > > >> > I'm doing some integration work with a COM API and according to their > >> > documentation to save data in the API, you have to assign to the > >> > method. > >> > > >> > This is their example in Visual Basic: > >> > > >> > > >> > >> ------------------------------------------------------------------------------------- > >> > Set oBank = New CBank > >> > oBank.Init Application.SessionContext > >> > With oBank > >> > .Fields(BANK_fld_ACCOUNT_NAME) = "Test account" > >> > .Fields(BANK_fld_ACCOUNT_NO) = "12345" > >> > .Fields(BANK_fld_BANK) = "Bank of the Nation" > >> > .Fields(BANK_fld_BRANCH_NAME) = "State Street Branch" > >> > End With > >> > oBank.Save > >> > > >> > >> ------------------------------------------------------------------------------------- > >> > > >> > Obviously in PHP is isn't possible to assign to a method in this way > >> > (thats what parameters are for!) So I'm at a bit of a loose end. I'm > >> > wondering if anyone else has come across this? Or am I missing > >> > something obvious in PHP's implementation of the COM that allows me to > >> > work around this? > >> > > >> > My PHP Code is looks like this: > >> > > >> > >> ------------------------------------------------------------------------------------- > >> > $API = new COM('API7.API'); > >> > $API->Init($SerialNo, $Login, '', 1, '', 1); > >> > $API->SignOutOnTerminate = True; > >> > > >> > $Record = new COM("Data.Record"); > >> > $Record->Init($API->SessionContext); > >> > > >> > $Record->Fields('BANK_fld_ACCOUNT_NAME') = 'Test Account';//doesn't work > >> > > >> > >> ------------------------------------------------------------------------------------- > >> > > >> > I've also tried (below) but the API says wrong number of parameters > >> > $Record->Fields('BANK_fld_ACCOUNT_NAME', 'Test Account'); > >> > > >> > I've also tried something crazy like this (below) but that overwrites > >> > the $Record object. > >> > $_R = &$Record->Fields('BANK_fld_ACCOUNT_NAME'); > >> > $_R = 'Test Account'; > >> > > >> > > >> > Any ideas? Is it possible? > >> > > >> > > >> > Many Thanks > >> > Adam Nicholls > >> > > >> > >> That example isn't assigning values to method return value. Fields is a > >> collection of ADO Field objects. The default property of a Field object is > >> its Value property, so the shorthand is simply assigning the values of the > >> variables to the value of each field in a record within a Recordset. > >> > >> Andrew > > > > > > So .. > > > > $oBank->BANK_fld_ACCOUNT_NAME = "Test account"; > > > > sort of thing. > > > > -- > > Richard Quadling > > Twitter : @RQuadling > > > > -- > Adam Nicholls Richard has the general idea correct, but as I recall it is a little more involved because it's COM. I've never done that much with COM in PHP because it was always such a pain. The example you posted probably used to require com_set() in PHP 4, although it looks like that has been deprecated in favor of a more typical OO syntax in PHP 5. Is there any chance there is a PHP version of the library that you can work with to avoid COM? If not, hopefully what follows will help start you on the right direction. A more explicit version of your original VBScript example looks like this: Set oBank = New CBank oBank.Init Application.SessionContext Set oField = oBank.Fields(BANK_fld_ACCOUNT_NAME) oField.Value = "Test account" Set oField = oBank.Fields(BANK_fld_ACCOUNT_NO) oField.Value = "12345" Set oField = oBank.Fields(BANK_fld_BANK) oField.Value = "Bank of the Nation" Set oField = oBank.Fields(BANK_fld_BRANCH_NAME) oField.Value = "State Street Branch" oBank.Save I'm not familiar with your CBank COM class, but the rest of it looks like it is similar to the COM('ADODB.Recordset'). If so, a rough translation of your original example should resemble this: <?php // I'm not familiar with this object, so I'm guessing on the call to instantiate it here. $oBank = new COM('CBank'); /** Application.SessionContext in the original refers to an object that is global to every request in an application. PHP does not have such a global registry, so I'm not sure where you're $config needs to come from. */ $oBank->Init($config); /** I am assuming that BANK_fld_ACCOUNT_NAME and such are constant names that were already defined with the names of the actual column names in a recordset returned by $oBank. */ $oBank->Fields(BANK_fld_ACCOUNT_NAME)->Value = "Test account"; $oBank->Fields(BANK_fld_ACCOUNT_NO)->Value = "12345"; $oBank->Fields(BANK_fld_BANK)->Value = "Bank of the Nation"; $oBank->Fields(BANK_fld_BRANCH_NAME)->Value = "State Street Branch"; $oBank->Save(); ?> I don't know if you could leave out the ->Value part of the syntax in PHP like you can in the VBScript example you posted. If so, then Richard's syntax would have been pretty close: $oBank->Fields(BANK_fld_BRANCH_NAME) = "State Street Branch"; Andrew -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php