Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Can't retrieve MEMO data
Message
From
04/02/2018 12:55:26
 
 
To
04/02/2018 09:46:06
General information
Forum:
Visual FoxPro
Category:
COM/DCOM and OLE Automation
Miscellaneous
Thread ID:
01657782
Message ID:
01657801
Views:
36
Pretty sure the only problem was in having to use macro expressions in the SP - something that's not supported in VFPOLEDB.
See my reply to Gregory : got things working OK using a VFP COM DLL with interop.
On reflection using a DLL instead of messing with SPs was always going to be the best solution in this case.....

>my guess is that VFPOLEDB has to establish at least rudimentary vfp functionality to execute SP. First avenue I'd check is to create a SP in vfp DBC which translates the restore-memo to array first, then perhaps writing out the inserted cursor the from 1st post as table. AFAIR calling SP i a dbc is supported by VFPOLEDB, but that is an area I often made detours around. Mostly shooting in the dark here - I have only gone vfp SP to hook some DBC events.
>
>>Hmm. But the core of the problem is in retrieving the data in a usable format from the MEMO field. Without 'REST FROM MEMO' the only way would be either to access the DBF file in it's 'raw' state from C# by navigating the table structure (which would be a nightmare) or, as suggested, elsewhere to use a VFP COM DLL.
>>
>>Pretty sure the VFPOLEDB problem is because macro expansion is not supported - which begs the question of how else this could be achieved in the SP .....
>>
>>>Blast from the past - restore from, early attempt at NoSQL ;-))
>>>
>>>IIRC the way the memvars/arrays are saved in the memo field has binary hints. Try to serialize, probably fastest way would be passing the cursor of your vfp code via clipboard. Safer of course anything toJSON, but probably slower. Marshalling the array might also work, but accessing each vfp array element from C# is chatty, not chunky across marshalling borders, so I'd try generating a single "item" on vfp side first and destructure that on .Net side. More code, less context switch
>>>
>>>
>>>
>>>
>>>
>>>>Trying to retrieve an array stored in a VFP MEMO field using a VFP SP via VFPOLEDB.
>>>>
>>>>The SP looks like this:
PROCEDURE GetShortNutri
>>>>LPARAMETERS theFile, theField, theRecno
>>>>USE &theFile. ORDER Id
>>>>=SEEK(theRecno)
>>>>RESTORE FROM MEMO &theField.
>>>>CREATE CURSOR result (Val1 N(5), Val2 N(5))
>>>>APPEND FROM ARRAY pgndata 
>>>>SETRESULTSET('result')
>>>>RETURN RECCOUNT('result')
>>>>ENDPROC
The C# code:
using (OleDbConnection conn = new OleDbConnection(this.ConnectionString))
>>>>            {
>>>>                DataSet ds = new DataSet();
>>>>
>>>>                string commandString = "GetShortNutri('" + this.TableName + "','" + this.FieldName + "'," + this.Record + ")";
>>>>                conn.Open();
>>>>                OleDbCommand command = new OleDbCommand(commandString, conn);
>>>>                command.CommandType = CommandType.StoredProcedure;
>>>>                var adapter = new OleDbDataAdapter(command);
>>>>                adapter.Fill(ds);  //Exception: 'Feature not available'
>>>>            }
>>>>
>>>>SP works in VFP. All parameters are correct in the C# code (TableName and FieldName are strings; Record is int) . But 'adapter.Fills(ds)' throws the commented exception. Any suggestions ?
>>>>
>>>>Oh, and I tried substituting ' (theField) ' instead of ' &theField ' etc. same thing....
Previous
Reply
Map
View

Click here to load this message in the networking platform