Aide - Recherche - Membres - Calendrier
Version complète : Conduit.. A l'aide
Les Forums de PalmAttitude.org > GENERAL PalmOS > Développement sous PalmOS
Destino
C la 1ere que je me lance dans le monde des CONDUITS.
j'essai de le développer en VB.
parcontre mon prog se plante fatalement lors de l'execution.
j'ai le msg d'error suivant: "Compile error: Expected array"
sur cette ligne du code: ReDim champs(NbrChamps)

Question subsidiaire: Que faire pour que je puisse testé tranquillement mon conduit sans affecter mon hotsync classique?
je crois que j'ai déjà fait du mal à mon hotsync car il repond mal en ce moment

voici mon code:

Type ModeleChamp
Nom As String
Type As Integer
Longueur As Long
Data As Variant
End Type

Global champs As ModeleChamp

Sub main()
Dim psav As PDRecordAdapter
Dim query As New PDDatabaseQuery
Dim pUtility As New PDUtility

Dim nIndex As Long
Dim vUniqueId As Variant
Dim nCategory As Long
Dim Attributes As ERecordAttributes
Dim vData As Variant

Dim ptr As Long
Dim NbrChamps As Integer
Dim NomChamp As String
Dim TypeChamp As Integer
Dim LongueurChamp As Integer
Dim texte As String
Dim strtmp As String
Dim longtmp As Long

Set psav = query.OpenRecordDatabase("TestDB", "PDDirect.PDRecordAdapter")
psav.IterationIndex = 0

vData = psav.ReadNext(nIndex, nuniqueid, nCategory, Attributes)

Do While Not psav.EOF
ptr = pUtility.ByteArrayToWORD(vData, 0, True, NbrChamps)
ReDim champs(NbrChamps)
For i = 1 To NbrChamps
ptr = pUtility.ByteArrayToBSTR(vData, ptr, 4, NomChamp)
ptr = ptr - 1
ptr = pUtility.ByteArrayToWORD(vData, ptr, True, NbrChamps)
ptr = pUtility.ByteArrayToWORD(vData, ptr, True, LongueurChamp)
champs(i).Nom = NomChamp
champs(i).Type = TypeChamp
champs(i).Longueur = LongueurChamp
Next i
For i = 1 To NbrChamps
Select Case champs(i).Type
Case 0
'chaine de caractères
ptr = pUtility.ByteArrayToBSTR(vData, ptr, champs(i).Longueur, strtmp)
'on ajoute 1 si le nombre d'octets est impair
If (champs(i).Longueur Mod 2) <> 0 Then
ptr = ptr + 1
End If
champs(i).Data = strtmp
Case 2
' date calculée à partir du 1/1/2000
ptr = pUtility.ByteArrayToDWORD(vData, ptr, True, longtmp)
champs(i).Data = #1/1/2000# + (longtmp - 35063)
End Select
Next i
vData = psav.ReadNext(nIndex, nuniqueid, nCategory, Attributes)
Loop

Set query = Nothing
Set psav = Nothing
Set pUtility = Nothing
End Sub
El Barto
Hugh,

Je ne suis pas un spécialiste de VB mais:

tu definis un type ModeleChamp:

Type ModeleChamp
Nom As String
Type As Integer
Longueur As Long
Data As Variant
End Type


Ensuite tu définis une variable de ce type :

Global champs As ModeleChamp

Bon, cette variable n'est pas définie comme un "array", ce qui implique que lorsque tu essayes de redimensioner la variable, le compilateur n'est pas content, d'où ton erreur.

En clair :? icon_bla.gif ta variable champs doit être définie comme array (table).

Recherche la syntaxe exacte dans l'aide de VB pour définir une variable comme array.
poolpy
CITATION
Que faire pour que je puisse testé tranquillement mon conduit sans affecter mon hotsync classique?  


En ce qui concerne les tests, tu peux installer un émulateur / simulateur PalmOS et le configurer pour une hotsync réseau vers la machine locale. Ca t'évitera de t'embêter avec le matériel !
Destino
j'ai refait mon code pour créer une Db qui est sensé avoir cette structure:
typedef struct {
char id[40];
char idc[10];
char Company[80];
char titre[20];
char LastName[80];
char FirstName[80];
} DBRecord;

j'ai fait un programme test qui ne fonctionne pas correctement.
SVP sauriez-vous ce qui ne va pas dans le code ? Merci à vous

voici mon code en VB:
Sub main()

Dim pDbQuery As New PDDatabaseQuery
Dim PDateRecord As New PDDateBookDbHHRecord
Dim pDateAdapter As PDDateBookDbHHRecordAdapter
Set pDateAdapter = pDbQuery.OpenRecordDatabase("Test2DB", "PDStandard.PDDatebookDbHHRecordAdapter", eRead Or eWrite)
'Set pDateAdapter = pDbQuery.CreateRecordDatabase("Test2DB", "PDStandard.PDDatebookDbHHRecordAdapter", "MAXP", "DATA", eWrite + eRead, eRecord, 1, 0)
' Fill in record data.
PDateRecord.Description = "Test Record"
PDateRecord.StartTime = "07/19/2002 9:00:00 AM"
PDateRecord.EndTime = "07/19/2002 9:15:00 AM"
' Write the record.
Dim uniqueid As Variant
uniqueid = pDateAdapter.Write(PDateRecord)


Set pDbQuery = Nothing
Set PDateRecord = Nothing
Set pDateAdapter = Nothing

End Sub

Merci VRAIMENT pour votre aide
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.