db2ibm-midrangeclclp

Export a CSV file from AS400 to my pc through Cl program


I want to export a database file that is created through a query, from the AS400 machine to my pc in the form of a csv file.

Is there a way to create that connection of the AS400 and my pc through a cl program?

An idea of what I want to do can be derived from the following code:

CLRPFM     DTABASENAME                         
RUNQRY     QRY(QRYTEST1)             
                   
                                        
CHGVAR     VAR(&PATH)  VALUE('C:\TESTS')     
CHGVAR     VAR(&PATH1) VALUE('C:\TESTS')    
CHGVAR     VAR(&CMD)   VALUE(%TRIM(&PATH) *CAT '/DTABASENAME.CSV' !> &PATH !> &PATH1)                     
                                                               
STRPCO     PCTA(*YES)                                        
STRPCCMD   PCCMD(&CMD) PAUSE(*YES)  

where I somehow get my database file, give the path that I want it to be saved in, in my pc , and lastly run the pc command accordingly


Solution

  • Take a look at
    Copy From Query File (CPYFRMQRYF)
    Which will allow you to create a database physical file from the query.

    You may also want to look at
    Copy To Import File (CPYTOIMPF)
    Which will copy data from a database physical file to an Integrated File System (IFS) stream file (such as .CSV); which are the type of files you'd find on a PC.
    ex:

    CPYTOIMPF FROMFILE(MYLIB/MYPF) TOSTMF('/home/myuser/DTABASENAME.CSV') RCDDLM(*CRLF) DTAFMT(*DLM) STRDLM(*DBLQUOTE) STRESCCHR(*STRDLM) RMVBLANK(*TRAILING) 
    FLDDLM(',')                                                                     
    

    However, there's no single command to transfer data to your PC. Well technically, I suppose that's not true. If you configure a (SMB or NFS) file share on your PC and configure the IBM SMB or NFS client; you could in fact CPYTOIMPF directly to that file share or use the Copy Object (CPY) command to copy from the IFS to the network share.

    If your PC has an FTP server available, you could send the data via the IBM i's FTP client. Similarly, if you have a SSH server on your PC, OpenSSL is available via PASE and SFTP or SCP could be used. You could also email the file from the i.

    Instead of trying to send the file to your PC from the i. An easier solution would be to kick off a process on the PC that runs the download. My preference would be a Access Client Solution (ACS) data transfer.

    You configure and save (as a .dtfx file) the transfer
    ACS Data Transfer

    Then you can kick it off with a STRPCCMD cmd('java -jar C:\ACS\acsbundle.jar /plugin=download C:\testacs.dtfx')

    More detailed information can be found in the Automating ACS Data Transfer document

    The ACS download compoent is SQL based, so you could probably remove the need to use Query/400 at all

    enter image description here