Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagedelphi
kysely := LuoSql('testikanta');
asetasql(kysely,'select tuote,sum(summa) as myynti from tuotemyy where tuotelaji in (0,2) and pvm>''2011'' ');
avaasql(kysely);
while not eofsql(kysely) do
begin
  showmessage(sqlfbs(kysely,'tuote')+' '+formatfloat('#0.00',sqlfbf(kysely,'myynti')));
  sqlnext(kysely);
end;
suljesql(kysely);
vapautasql(kysely);

kysely1 := CreateSql('testikanta','select count(*) as maara from tuote where ryhma = :r');
preparesql(kysely1);
for i := 1 to 10 do
begin
  sqlSetParam(kysely1,'r',i);
  opensql(kysely1);
  showmessage('Tuoteryhmässä '+inttostr(i)+' on tuotteita '+inttostr(sqlfbi(kysely1,'maara')));
  closesql(kysely1);
end;
unprepareSql(kysely1);
vapautasql(kysely1);

Excel liityntä

Excel yhteys perustaa AdoDb:n. Esimerkki avauksesta, tässä excel avataan vain luku tilaan. Lisäksi kerromme että headereita ei ole (HDR=NO) jolloin kentät ovat f1, f2 jne sekä excel ei yritä päätellä datatyyppejä (IMEX=1). Jälkimmäinen on tarpeen jos siellä on tyhjiä tai sekalaisia arvoja samassa sarakkeessa. 

Code Block
languagedelphi
var
  q;
begin
  q := TAdoQuery.Create(nil);
  // onko uudempi xcls
  if pos('.XLSX', Uppercase(lahdetiedosto) )  = length(lahdetiedosto)-4 then                            
    q.connectionString :='Provider=Microsoft.ACE.OLEDB.12.0;Data Source='+lahdetiedosto+';'+
           'Extended Properties="Excel 12.0 Xml;HDR=No;IMEX=1"'
 else
    q.connectionString :='Provider=Microsoft.JET.OLEDB.4.0;Data Source='+lahdetiedosto+';'+
           'Extended Properties="Excel 8.0;HDR=No;IMEX=1"'
  q.sql.text := 'select f1 as numero,f2 as tilauskoodi,f3 as nimi,   '+
                'f4 as paaryhma,f5 as tuoteryhma ,f6 as aliryhma, '+
                'f7 as vero,f8 as toimittaja,f9 as hinta,f10 as keskihinta,f11 as tilauskoko,f12 as hrkerroin, f13 as hryksikko, '+
                'f14 as vyks, f15 as myks, f16 as tilyks, f17 as lisatunnus, '+
                'f18 as vari, f19 as koko, f20 as viivakoodi '+
                'from [Tuote$]';
  q.active := true;
  while not q.eof do
  begin 
    showmessage(q.fieldbyname('numero').asstring+' '+q.fieldbyname('nimi').asstring);
    q.next;
  end; 
  q.close;
  q.free;

 

Kun exceliä haluataan kirjoitttaa, pitää Extended properties olla 'Extended Properties="Excel 12.0 Xml;ReadOnly=False;HDR=YES" (kun siis uudempi excel) eli HDR on pakollinen ja IMEX ei saa olla. Alla muutama esimerkki update/insert lauseesta.

Code Block
languagedelphi
  q.sql.text := 'insert into [Tuote$] (tuotenumero, tilauskoodi, nimi) values (''kenttä1'', ''kenttä2'', ''kenttä3'')';
  q.execsql;

  q.sql.text := 'update [Tuote$] set NIMI = ''aa'', TILAUSKOODI=''bb'', HRKERROIN=10.32 where TUOTENUMERO=''kenttä1'' ';
  q.execsql;

  q.sql.text := 'update [Tuote$] set NIMI = ''aa'', TILAUSKOODI=''bb'', [OH (sis ALV)]=10.42 where TUOTENUMERO=''VARITUOTE1'' ';
  q.execsql;

 

 

 

Muut

  • procedure ShowMessage(s);
    • näyttää MessageBoxin.
  • function OnkoParam(parametri): string;
    • Palauttaa parametrin arvon tai vakion NOPARAM jos parametria ei ole annettu. Esim.
      lahdetiedosto := onkoparam('lahde');
      if lahdetiedosto = NOPARAM then
      lahdetiedosto := 'c:winskjdata.txt';
      komentorivillä parametri olisi annettu skjscript /f:skriptinnimi.pas /run /lahde:c:\data\joku.txt

...