Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
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
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?
Hors ligne
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
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
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...
Hors ligne
Marcus a écrit:
Version PB ou BDD aucune importance !
Que nenni, et voici pourquoi:
En PB6.5, ton importfile aurait été codé ainsi:
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.
Hors ligne
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
Hors ligne
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
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.
Hors ligne
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
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
// 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 ...
Hors ligne
Ben oui mais pas d'Excel hélas
Hors ligne