Après windows pour les nuls, voici PB pour les bons (ou presque).

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 10-06-2008 08:10:26

Marcus  
Membre Geek
Lieu: Namur
Date d'inscription: 20-06-2006
Messages: 39
Pépites: 258
Banque: 0

Importfile ne reprend pas la ligne d'entete

Bonjour à tous,

J'ai un problème avec un importfile.
J'ai un fichier DBF à importer. Ce fichier contient une trentaine de colonnes. Lorsque j'ouvre le fichier en Excel,
je vois les entêtes de colonnes sur la ligne 1. Les données suivent à partir de la ligne 2. Ok

J'ai créé une datawindow external avec autant de colonnes (en string) qu'il y a de colonnes dans le DBF.
Quand je fais l'importfile dans un script ou même dans le painter, l'import me scrotte ma première ligne.
Aucune trace de cette ligne d'entête, la première ligne dans la dw est en fait la première ligne des data.

Mon but est de contrôler les libellés des entêtes de colonnes qui doivent respecter un ordre et une syntaxe.
Je dois aussi pouvoir me passer de tout outil extérieur (Excel ou autre).

Auriez-vous une idée quant à la manière de récupérer la ligne d'entête d'un fichier DBF ? Ca m'a l'air tout
bête, il y a certainement quelque chose qui m'échappe, mais bon...

Merci à tous

Hors ligne

 

#2 10-06-2008 08:22:57

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: Importfile ne reprend pas la ligne d'entete

Bonjour Marcus,

Pourrais-tu nous fournir ton script d'importation?
C'est pour vérifier les paramètres de ton Importfile.

Ton fichier DBF est bien un dbase ASCII de format 2 ou 3?

Tu es sur quelle version de PB et de BDD?


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#3 10-06-2008 08:34:04

Cortex  
Modérateur
Lieu: Arlon
Date d'inscription: 08-02-2008
Messages: 194
Pépites: 6,904
Banque: 2,109,818,425,070

Re: Importfile ne reprend pas la ligne d'entete

Salut.

Desole, mais j'ai pas trop d'idee comme ca...
Pourrais-tu nous fournir les 2-3 premieres lignes de ton fichier DBF, stp? Et tant que tu y est, si tu pouvais copier/coller ton appel a importFile...

Hors ligne

 

#4 10-06-2008 08:37:19

Marcus  
Membre Geek
Lieu: Namur
Date d'inscription: 20-06-2006
Messages: 39
Pépites: 258
Banque: 0

Re: Importfile ne reprend pas la ligne d'entete

Salut Foon et merci,

Ben le script, c'est basic
ll_rows = dw_test.ImportFile(Dbase3!, "tt.dbf")

Facilement reproduisible :
Tu prends une chtite table (2 ou 3 records, 2 ou 3 colonnes pour la facilité).
Tu fais un save rows as en DbaseIII (tt.dbf)
Tu relis ton tt.dbf avec Excel. Dans Excel, on a autant de lignes que de records + 1 pour l'entête.
Ensuite, painter ou script, tu fais l'importfile et t'as perdu la 1ère ligne. Si tu boucle sur les data
dans un script, la row 1 commence aux data

Quelque part, on peut y trouver une certaine logique et je pense que dans ce cas, l'importfile n'est
pas utilisable. Mon but est seulement de lire la ligne d'entête des colonnes. Mais bon, je sèche.

Version PB ou BDD aucune importance !

Hors ligne

 

#5 10-06-2008 08:42:32

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Importfile ne reprend pas la ligne d'entete

quelque part c'est un peu "normal"
suppose que tu as une colonne de type numérique ou date
et tu veux récupérer en ligne 1 le libellé de la colonne qui est une chaine => pb de format...


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#6 10-06-2008 08:52:52

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: Importfile ne reprend pas la ligne d'entete

Marcus a écrit:

Version PB ou BDD aucune importance !

Que nenni, et voici pourquoi:

En PB6.5, ton importfile aurait été codé ainsi:

Code: pb

ll_rows = dw_test.ImportFile("tt.dbf")

Et, dans ce cas, la ligne d'entête aurait été importée:

Aide PB6.5 a écrit:

dwcontrol.ImportFile ( filename {, startrow {, endrow {, startcolumn     {, endcolumn {, dwstartcolumn } } } } } )
(...)
startrow (optional)    The number of the first row in the file that you want to copy. If the first row contains headings that you want to skip, set startrow to 2. The default is 1

En PB10.5, par contre, la même syntaxe ne ramène plus que
les lignes de détails (Le header est systématiquement ignoré):

Aide PB10.5 a écrit:

long dwcontrol.ImportFile ( {saveastype importtype}, string filename {, long startrow {, long endrow {, long startcolumn {, long endcolumn {, long dwstartcolumn } } } } } )
(...)
startrow
(optional for PowerBuilder)    The number of the first detail row in the file that you want to copy. The default is 1.

Conclusion: A partir d'une certaine version de PB (laquelle, je n'en sais rien), la gestion des headers par importfile n'est plus supportée.


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#7 10-06-2008 08:58:45

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Importfile ne reprend pas la ligne d'entete

Marcus a écrit:

Mon but est de contrôler les libellés des entêtes de colonnes qui doivent respecter un ordre et une syntaxe.
Je dois aussi pouvoir me passer de tout outil extérieur (Excel ou autre).

dommage, car un simple OLE Excel te permettrait de faire ça assez rapidement


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#8 10-06-2008 09:01:20

Marcus  
Membre Geek
Lieu: Namur
Date d'inscription: 20-06-2006
Messages: 39
Pépites: 258
Banque: 0

Re: Importfile ne reprend pas la ligne d'entete

Oufti,

Super bien vu Foon. Y sont cons chez Sybase. Je suis en version 9.0.3
Ca m'arrange pas çà.
Si qq1 à une idée...

Hors ligne

 

#9 10-06-2008 09:06:56

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: Importfile ne reprend pas la ligne d'entete

Marcus a écrit:

Mon but est de contrôler les libellés des entêtes de colonnes qui doivent respecter un ordre et une syntaxe.
Je dois aussi pouvoir me passer de tout outil extérieur (Excel ou autre).

Bon, sans garantie car non testé sur des fichiers DBF: Regarde si tu ne peux pas utiliser les fonctions Fileopen, FileRead, FileClose... de
PB pour lire ton entête de fichier.


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#10 10-06-2008 09:14:03

Marcus  
Membre Geek
Lieu: Namur
Date d'inscription: 20-06-2006
Messages: 39
Pépites: 258
Banque: 0

Re: Importfile ne reprend pas la ligne d'entete

Ben, j'avais essayé bien sur, mais je ne reçois que des injures et des caractères biscornus avec FileRead.
J' ai même essayé en Blob, puis un string () du blob mais c'est KO.

Hors ligne

 

#11 10-06-2008 09:19:11

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Importfile ne reprend pas la ligne d'entete

erasorz a écrit:

Marcus a écrit:

Mon but est de contrôler les libellés des entêtes de colonnes qui doivent respecter un ordre et une syntaxe.
Je dois aussi pouvoir me passer de tout outil extérieur (Excel ou autre).

dommage, car un simple OLE Excel te permettrait de faire ça assez rapidement

Code: pb

//  Connection to Excel objects 
OLEObject lo_Excel 
OLEObject lo_Sheet 
OLEObject lo_Workbook 


//  Hookup to the Excel Document 
lo_Excel = CREATE OLEObject 
li_Result = lo_Excel.ConnectToNewObject ( "excel.application" ) 
IF li_Result < 0 THEN 
 //...error handling goes here 
END IF 


//  Open the excel file 
lo_Excel.Application.Workbooks.Open ( "ton_fichier_dbf" ) 
lo_Workbook = lo_Excel.Application.ActiveWorkbook 
lo_Sheet = lo_Excel.Application.ActiveSheet


// récupération des entêtes
la_result = lo_sheet.Cells( 1, 1 ).Value
la_result = lo_sheet.Cells( 1, 2 ).Value
...



N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#12 10-06-2008 11:15:34

Marcus  
Membre Geek
Lieu: Namur
Date d'inscription: 20-06-2006
Messages: 39
Pépites: 258
Banque: 0

Re: Importfile ne reprend pas la ligne d'entete

Ben oui mais pas d'Excel hélas

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22