Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Join us to spark ideas for how to put the latest capabilities into action. Register here!
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Use database names from Excel sheet in a For Loop for Connection String.

Hi,

I am a newbie to Qlikview and coding in general. I need some help figuring out how to do a for loop.

What I have is an Excel spreadsheet with two columns ProjectName and DatabaseName.

I brought in the excel file like this..

ANProjects:

LOAD

     ProjectName,

     DatabaseName

FROM

(ooxml, embedded labels, table is Sheet1);

Which brings the columns in to Qlikview, Now I want to create a For loop that will use the database names row by row in the connection string.

Example connection string, blue area is where I need to connect the Database.

OLEDB CONNECT32 TO [Provider=ABCDEDB.1;Persist Security Info=True;User ID=BI_QLIKVIEW;Initial Catalog=$(databaseName);Data Source=ABCD1P;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=00000;Use Encryption for Data=False;Tag with column collation when possible=False] (XPASsword is BLANK);


So I do not know how to load the database row by row which might involve a variable.

Each database will give the project more fields which are associated with different project names.

Instead of having to do a new connection string each time, and defining the fields I need I want to automate the process by pulling in all fields from each database, in a For Loop.

Example excel spread sheet:

ProjectNameDatabaseName
Project1project1_db
Project2project2_db
Project3project3_db

Please let me know if I am not making myself clear.

Thank you

Alam

1 Solution

Accepted Solutions
maxgro
MVP
MVP

do you mean this?

t:

load * inline [

ProjectName, DatabaseName

Project1, project1_db

Project2, project2_db

Project3, project3_db

];

// fill variable with field values row by row

For i = 0 To NoOfRows('t')-1

  let vDatabaseName=peek('DatabaseName', $(i));

  let vProjectName=peek('ProjectName', $(i));

  trace $(vDatabaseName)  $(vProjectName);

  // .......... use connection string ???

next;

View solution in original post

4 Replies
ecolomer
Master II
Master II

Hi

Here you are an example:

// list files "classment.html" en hard disc

DIRECTORY C:\Mis lugares Web\F1\www.statsf1.com\es;

Set Root='C:\Mis lugares Web\F1\www.statsf1.com\es';

FOR any=1950 to 2013;

   FOR Each Dir in DirList ('$(Root)\$(any)'&'\*.')

       FOR Each File in FileList ('$(Dir)'&'\class*.html')

  Res:

       LOAD

              '$(any)' as GP_Año,

              Mid('$(Dir)',47) as Pais_f,

              Pos as GP_Posición,

              N° as GP_Num,

              Piloto as GP_Piloto,

              Chasis as GP_Equipo,

              Motor as GP_Motor,

              Vuelta as GP_Vueltas,

             F7 as GP_Tiempo,

             Pts as GP_Puntos

           FROM [$(File)]

                  (html, utf8, embedded labels, table is @1)

                where N°>0;

         NEXT File

     NEXT Dir

NEXT any

maxgro
MVP
MVP

do you mean this?

t:

load * inline [

ProjectName, DatabaseName

Project1, project1_db

Project2, project2_db

Project3, project3_db

];

// fill variable with field values row by row

For i = 0 To NoOfRows('t')-1

  let vDatabaseName=peek('DatabaseName', $(i));

  let vProjectName=peek('ProjectName', $(i));

  trace $(vDatabaseName)  $(vProjectName);

  // .......... use connection string ???

next;

Not applicable
Author

Let me try this and I will get back to you.

Thanks

Not applicable
Author

Thank you Massimo

This does work it runs through each database and connects to each one. Now I need to figure out how to take the data in for each database by Concatenating the table called (Defects) I created.

Let me know if you can help further, thanks.

I have this so far.

// fill variable with field values row by row

For i = 0 To NoOfRows('ANProjects')-1

  let vDatabaseName=peek('DatabaseName', $(i));

  let vProjectName=peek('ProjectName', $(i));

  trace $(vDatabaseName)  $(vProjectName);

  // .......... use connection string ???   // Added the new variable from the for loop.

  OLEDB CONNECT32 TO [Provider=ABCDEDB.1;Persist Security Info=True;User ID=BI_QLIKVIEW;Initial Catalog=$(vDatabaseName);Data Source=ABCD1P;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=00000;Use Encryption for Data=False;Tag with column collation when possible=False] (XPASsword is BLANK); 

Let vDefectsTableName = 'Defects'; // Define Table Name

$(vDefectsTableName):

// Load everything in to table variable

LOAD *;

SQL SELECT *

FROM $(vDefectsTableName);

// Get information from Table in database

SELECT *

FROM tablename; /*Defect*/  //Table in each database is the same name.

next;