2012. július 12., csütörtök

VBA / VBS használat



Megjegyzés:
' Ez egy megjegyzés






MINTA:
' --------------- SQL ripport  ---------------
'********************************************************************
'*
'* Copyright Kecskeméti Lajos
'*
'* Module Name:    sql_xls.vbs 
'*
'* SQL eredmény XLS-be töltése
'*
'*
'********************************************************************

' alap beállítások
Option Explicit

ON ERROR RESUME NEXT
Err.Clear

' valtozók
Dim objRootDSE, strDNSDomain, adoConnection
Dim strBase, strFilter, strAttributes, strQuery, adoRecordset
Dim strName, strDN, objManagerList, strManagerDN
Dim objExcel, objWorkbook, objWorkSheet, x, y, celx,cely, eField, objRange, objRange2
Dim strExcelPath
Dim strCon

Const xlAscending = 1
Const xlDescending = 2
Const xlYes = 1

wscript.echo date 
wscript.echo now 

'--------- Oracle konnekció
strCon = "Driver={Microsoft ODBC for Oracle}; " & _
         "CONNECTSTRING=(DESCRIPTION=" & _
         "(ADDRESS=(PROTOCOL=TCP)" & _
         "(HOST=szerver)(PORT=1521))" & _
         "(CONNECT_DATA=(SID = DB))); uid=nev;pwd=jelszo;"

Dim oCon: Set oCon = WScript.CreateObject("ADODB.Connection")
Dim oRs: Set oRs = WScript.CreateObject("ADODB.Recordset")
oCon.Open strCon

'Set oRs = oCon.Execute(" SELECT sysdate FROM DUAL union SELECT to_char(sysdate,'YYYYMMDD') FROM DUAL ")
Set oRs = oCon.Execute(" select * from kz_heti_teny  where 1=1 and period ='20110129' ")

strExcelPath = "d:\tmp\seredmeny_01.xlsx"

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = FALSE
objExcel.ScreenUpdating = FALSE
objExcel.DisplayAlerts = FALSE 
Set objWorkbook = objExcel.Workbooks.Add

wscript.echo time 

'objExcel.Visible = True

'Set objWorkbook = objExcel.Workbooks.Add
Set objWorksheet = objWorkbook.Worksheets(1)
wscript.echo now & "elso 1" 

celx = 1
cely = 0
x = 1
y = 1

'While Not oRs.EOF  
do until oRs.EOF
    for each eField in oRs.Fields
 If x = 1 Then
 ' fejléc
  objExcel.Cells((celx + x - 1), (cely + y )).Value = eField.name
  objExcel.Cells((celx + x), (cely + y)).Value = eField.value
 else
  objExcel.Cells((celx + x), (cely + y)).Value = eField.value
 End If  
  y = y + 1
'   WSCript.Echo "Valami-1"
'   WSCript.Echo celx
'      WSCript.Echo eField.value
next
y = 1
    x = x + 1
    oRs.MoveNext
'Wend
'WSCript.Echo x
loop

set objWorksheet = objWorkbook.Worksheets(2).Activate
Dim valodi_ketdtomb() 'dynamic array
ReDim valodi_ketdtomb(x-1,oRs.Fields.Count) 'redim 4 rows, 3 cols

oRs.MoveFirst
x = 0
y = 0
do until oRs.EOF
    for each eField in oRs.Fields
 If x = 0 Then
  valodi_ketdtomb(x, y) = eField.value
 else
  valodi_ketdtomb(x, y) = eField.value
 End If  
  y = y + 1
'   WSCript.Echo "Valami-1"
'   WSCript.Echo celx
'      WSCript.Echo eField.value
next
y = 0
    x = x + 1
    oRs.MoveNext
'Wend
'WSCript.Echo x
loop

'valodi_ketdtomb=array(null,1,2,3, 4,0,11,22,33,44,0,111,222,333,444,null)

Dim valodi_ketdtomb_regi() 'dynamic array
ReDim valodi_ketdtomb_regi(4,3) 'redim 4 rows, 3 cols
valodi_ketdtomb_regi(0,0) = 1
valodi_ketdtomb_regi(0,1) = 2
valodi_ketdtomb_regi(0,2) = 3
valodi_ketdtomb_regi(1,0) = 10
valodi_ketdtomb_regi(1,1) = 200
valodi_ketdtomb_regi(1,2) = 300

objExcel.Range("E1").Value = oRs.Fields.Count
objExcel.Range("E2").Value = x 'oRs.Records.Count

'Populate by column and row

objExcel.Range("A1:D20").Value = 5
'objExcel.Range("F1:T100").Value= valodi_ketdtomb
objExcel.Range( objExcel.Cells(2,6), objExcel.Cells(x+2,6+oRs.Fields.Count) ).Value = valodi_ketdtomb

objExcel.Range( objExcel.Cells(3,5), objExcel.Cells(5,5) ).Value = "E3-R1C5"
'Range(Cells(3,5),Cells(5,5)).Select

wscript.echo now & "masodik 2" 

' XLS  megjelenítés
 'objExcel.Visible = True
wscript.echo now 

' Save the spreadsheet.
'objExcel.ActiveWorkbook.Save
objExcel.ActiveWorkbook.SaveAs strExcelPath
objExcel.ActiveWorkbook.Close

' Quit Excel
objExcel.Application.Quit

wscript.echo now 

' Clean up.
adoRecordset.Close
adoConnection.Close 

oCon.Close
Set oRs = Nothing
Set oCon = Nothing

wscript.echo now 

' --------------- LDAP ---------------

'********************************************************************
'*
'* Copyright Kecskeméti Lajos
'*
'* Module Name:    sql_xls.vbs 
'*
'* SQL eredmény XLS-be töltése
'*
'*
'*


'********************************************************************
Set adoCommand = CreateObject("ADODB.Command")
Set adoConnection = CreateObject("ADODB.Connection")
adoConnection.Provider = "ADsDSOObject"
adoConnection.Open "Active Directory Provider"
adoCommand.ActiveConnection = adoConnection

Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("DefaultNamingContext")
strBase = "<LDAP://" & strDNSDomain & ">"

strFilter = "(&(objectClass=user))"
strAttributes = "sAMAccountName, distinguishedName"
strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
adoCommand.CommandText = strQuery
adoCommand.Properties("Page Size") = 10000
adoCommand.Properties("Timeout") = 30
adoCommand.Properties("Cache Results") = False
Set adoRecordset = adoCommand.Execute


adoRecordset.MoveFirst

strResults = "User Login Names" 

Do Until adoRecordset.EOF 
'Retrieve values and display
strName = adoRecordset.Fields("sAMAccountName").Value 
strDN = adoRecordset.Fields("distinguishedName").Value
strResults = strResults & VbCrLf & strName & " | " & strDN
adoRecordset.MoveNext
Loop

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("eredmeny.txt", True)
objFile.Write strResults
objFile.Close
Set objFile = Nothing
MsgBox "Elkészültem nézz bele a 'eredmeny.txt' -be."



Használata
cscript sql_xls.vbs 
wscript sql_xls.vbs 

PowerShell alapok 1

A PowerShellt a Microsoft eleinte a hagyományos CMD / DOS-prompt, a parancssor utódjaként tervezte, de aztán egyre inkább egy univerzális rendszerkezelő, feladatautomatizáló platformként lett definiálva.

A PowerShell tehát egyszerre nagyon sok minden: parancssori eszköz, amellyel begépelt parancsokkal tudjuk utasítani a számítógépünket, hogy különböző műveleteket elvégezzen. A PowerShell egy programnyelv is, minden ehhez szükséges jellemzővel: ciklussal, vezérlőutasításokkal, operátorokkal, változókkal, adattípusokkal.

PowerShell :

az  Windows parancssori rendszerhéj, mely különösen a rendszergazdák (üzemeltetésre) számára terveztek. 


Windows PowerShell tartalmaz egy interaktív kérdés és a egy parancsfájl-kezelési környezet, amely önállóan vagy együtt is használhatók.


Legtöbb rendszerhéjjal ellentétben, a komunikáció  szöveg, de a windows PowerShell a .NET-keretrendszer közös nyelvi futtatókörnyezet (CLR) és a .NET-keretrendszer épül, és objektumokkal kommunikál.


 Ez a alapvető változtatás a környezet kezelése és a Windows configuration teljesen új eszközöket és módszereket biztosít.


 Windows PowerShell több mint száz alapszintű fő parancsmagot tartalmaz, és mindenki írhat írhat saját parancsmagokat is, melyeket akár más felhasználókkal való megosztással is használhat..



A környezetválasztóval, például a Windows PowerShell hozzáférést biztosít a fájlrendszerhez regisztry-hez, szolgáltatók más adattárakban, a beállításjegyzék és a digitális aláírás tanúsítványtárolókban lévő adatokhoz is.



Használata:

   - Fejelsztésre a  Powershell ISE alkalmazáson interaktív módban a legkényelmesebb
   - Futtatáshoz az elkészült és állományba mentett szkript (  .ps1 file) futtatása elég


Szintaktika

Megjegyzés jelölése :
##  íéáűúőóüö_ÍÉÁŰÚŐÓÜÖ 

Más ps elő betöltése:
. d:\prg\Reporting\Modules\kl.ps1 

Környezet munkaterület beállítása:
d:
cd \prg\kl\riport




Értékek file-ből betöltése és feldolgozása (soronként tömb elemibe):

$kltam = Get-Content "d:\prg\tam.txt"

$count =0
$kltam | ForEach-Object{


## beolvasás fileből és minta csere tömb elemeivel:

$sql = Load-File ("d:\prg\riport\kl.sql")
$r=[regex]':csere:';
$sql = $r.Replace($sql, $kltam[$count], -1);


...


   $count++
}


Minta : LDAP (maszkolt) felhasználók lista lekérdezés és excel-be írás:


$SAMName = "kecskemetil*"
$excel = New-Object -COM Excel.Application
$ci = [System.Globalization.CultureInfo]'en-US'
$src="d:\prg\ldap.xls"
if ( [System.IO.File]::Exists($src) )
{
  remove-item -force $src
}
$book = $excel.Workbooks.PSBase.GetType().InvokeMember('Add', [Reflection.BindingFlags]::InvokeMethod, $null,$excel.Workbooks, $null, $ci)
$excel.Visible = 0
$sheet = 1
$sh = $book.sheets.item($sheet)

$sh.Cells.item(1,1).formulaLocal = "CN"
$sh.Cells.item(1,2).formulaLocal = "sAMAccountName"
$sh.Cells.item(1,3).formulaLocal = "title"
$sh.Cells.item(1,4).formulaLocal = "distinguishedname"
$sh.Cells.item(1,5).formulaLocal = "manager"
$sh.Cells.item(1,6).formulaLocal = "displayName"
$sh.Cells.item(1,7).formulaLocal = "physicalDeliveryOfficeName"
$sh.Cells.item(1,8).formulaLocal = "mail'"
$sh.Cells.item(1,9).formulaLocal = "department"
$sh.Cells.item(1,10).formulaLocal = "mobile"
$sh.Cells.item(1,11).formulaLocal = "memberOf"
$sh.Cells.item(1,12).formulaLocal = "initials"

$i = 2

ldap_fnev & "));cn, samaccountname, title, distinguishedname, employeeid, physicalDeliveryOfficeName, manager, displayName, department, mail, mobile, mailNickname, manager, description, extensionAttribute2;subtree"
$root = [ADSI]"LDAP://DC= netudki,DC=corp"
$search = [adsisearcher]$root
$Search.filter = "(&(objectClass=user)(sAMAccountName= $SAMName))"
$colResults = $Search.FindAll()

$ii=2
foreach ($i in $colResults)
{
$sh.Cells.item($ii,1).formulaLocal = [string]$i.Properties.Item('cn')
$sh.Cells.item($ii,2).formulaLocal = [string]$i.Properties.Item('sAMAccountName')
$sh.Cells.item($ii,3).formulaLocal = [string]$i.Properties.Item('title')
$sh.Cells.item($ii,4).formulaLocal = [string]$i.Properties.Item('distinguishedname')
$sh.Cells.item($ii,5).formulaLocal = [string]$i.Properties.Item('manager')
$sh.Cells.item($ii,6).formulaLocal = [string]$i.Properties.Item('displayName')
$sh.Cells.item($ii,7).formulaLocal = [string]$i.Properties.Item('physicalDeliveryOfficeName')
$sh.Cells.item($ii,8).formulaLocal = [string]$i.Properties.Item('mail')
$sh.Cells.item($ii,9).formulaLocal = [string]$i.Properties.Item('department')
$sh.Cells.item($ii,10).formulaLocal = [string]$i.Properties.Item('mobile')
$sh.Cells.item($ii,11).formulaLocal = [string]$i.Properties.Item('memberOf')
$sh.Cells.item($ii,12).formulaLocal = [string]$i.Properties.Item('initials')
$ii++
}

#excel elmentése $src helyre és néven "56" formátumban - excel formátum, majd futo excel folyamat bezárása
[void]$book.PSBase.GetType().InvokeMember('SaveAs', [Reflection.BindingFlags]::InvokeMethod, $null, $book, ($src,"56"), $ci)
$excel.quit() 
#  if (ps excel) { kill -name excel}  ### ha fut mindenképpen lezárás
$null = [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel)




PS használat:
cmd/bat fileből: 
powershell -noexit &"c:\Könyvtár szóközzel\második.ps1"
powershell -noexit c:\második.ps1


Buktatók:
 - a társítás ps1 notepad.exe ezért futtatásnál nem fút
 - teljes elérési útvonal megadása szükséges
 - jogosultság beállítása (csak admin)
## jog beállítása
PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
PS C:\> Set-ExecutionPolicy -ExecutionPolicy Bypass
## jog lekérdezése
PS C:\> Get-ExecutionPolicy -List

2012. május 11., péntek

Oracle SQL és PLSQL használata

--- kiajanlás
grant select tabla to public;

--- analizállás
Analyze Table tmp Estimate Statistics Sample 33 Percent;

--- táblák és mezök listája
select * from ALL_TAB_COLUMNS where column_name like '%SAJAT%'

--- SQL történet
select * from  dba_hist_sqlstat
select * from  dba_hist_snapshot


---hosszú futás idő
select * from   v$session_longops

----- select kikérése
select * from  v$sql

SELECT * FROM  v$sqlarea

select * from  v$sqltext
select * from  v$sqltext_with_newlines


select sesion.sid,
       sesion.username,
       optimizer_mode,
       hash_value,
       address,
       cpu_time,
       elapsed_time,
       sql_text
  from v$sqlarea sqlarea, v$session sesion
 where sesion.sql_hash_value = sqlarea.hash_value
   and sesion.sql_address    = sqlarea.address
   and sesion.username is not null
   and sesion.username like 'K%'
  
   SELECT SQL_FULLTEXT FROM GV$SQLAREA
   SELECT * FROM GV$SQLAREA where sql_text like 'Select%sajat%'


---- adatbázis használat / várható futásidő
SELECT   
username,
OPNAME,
message,
TO_CHAR (a.start_time, 'yyyy.mm.dd hh24:mi:ss') as started,
ROUND ((a.sofar / a.totalwork) * 100, 2) as complete,
TO_CHAR (TRUNC (a.time_remaining / 3600))
         || ':'
         || TO_CHAR (TRUNC (MOD (a.time_remaining, 3600) / 60), 'fm00')
         || ':'
         || TO_CHAR (TRUNC (MOD (MOD (a.time_remaining, 3600), 60)), 'fm00')
as timeremaining
FROM v$session_longops a
WHERE (sofar / totalwork) * 100 != 100
and totalwork != 0
and username like 'K%'
ORDER BY started DESC

  Párhuzaqmosítás

-- Futtatandó parancsban:
SELECT /*+PARALLEL(kl 3)*/ * FROM tabla_1 kl;

-- Táblák használat beállítása:
ALTER TABLE tabla_1 PARALLEL 3;

-- Munkamenet:
ALTER SESSION FORCE PARALLEL QUERY;
ALTER SESSION ENABLE PARALLEL DML;

-- Lekérdezésa beállításnál
SELECT name, value FROM v$parameter WHERE name IN ('parallel_max_servers', 'parallel_min_servers');

-- Függvény törzs/tartalom lekérdezés
select
  case when line=1 then 'create or replace ' else null end
||regexp_replace(text,'['||chr(10)||chr(13)||']+$') as SOROK
from all_source
where 1=1
and type='FUNCTION'
and owner='USER_NEV'
and name='F_USER_PRIVATE_FUNCTION'
order by line;

-- Jelszó csere 
alter user <username> identified by <new password>  replace <old password>

-- Szerkezet/leírás kikérése
describe tabla_1;

-- Különleges karakterek
SELECT ASCIISTR(CHR(128) || 'Udv' || CHR(255)) FROM dual;
SELECT ASCII('Z') FROM dual;
SELECT 'ol' || COMPOSE('e' || UNISTR('\0301')) FROM dual;  --- (Unicode szöveggé alakítás : COMPOSE)
SELECT CONVERT('Ä E Í O O A B C D E','US7ASCII','WE8ISO8859P1') FROM dual;
SELECT DECOMPOSE('ol' || COMPOSE('e' || UNISTR('\0301'))) FROM dual;
SELECT ASCII(SUBSTR('Valami szöveg',1,1)) FROM dual;

-- Formázás
SELECT TO_CHAR(SYSDATE, 'YYYY.MM.DD HH:MI:SS') FROM dual;
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY.MON.DD HH24:MI:SS';
ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
ALTER SESSION SET TIME_ZONE = '2:0';



set echo off
set feedback off
set heading off
set linesize 500
set numwidth 18
set pagesize 0
set trimspool on
set verify off

--set termout OFF
--ALTER SESSION SET NLS_DATE_FORMAT="DD-MON-YY";
alter session set NLS_DATE_FORMAT='YYYY.MM.DD HH24:MI:SS Dy'
ALTER SESSION SET NLS_LANGUAGE='AMERICAN';
ALTER SESSION SET NLS_NUMERIC_CHARACTERS='.,';
/
ALTER SESSION SET recyclebin = OFF;
/
insert into munk_log (sorszam,kezdes) values ('09',sysdate);
commit;
/


set serveroutput on size 30000;
exec DBMS_OUTPUT.PUT_LINE('Kezdődik most:');
begin
for rec in (select * from CALENDAR where YYYYMM ='202001')  loop
---    ebh_iwfs.iwfs_campaign_pkg.delete_campaign(day_num => rec.day_num);
   DBMS_OUTPUT.PUT_LINE('napok' || rec.day_num);
end loop;
end;
SET SERVEROUTPUT Off;

spool c:\tmp\kp_igeny.txt
/
spool off


select sysdate,
trunc(sysdate),
add_months(date'2020-01-01', -2),
months_between(date'2020-01-01', date'2020-05-05')
from dual


BEGIN
   dbms_output.put_line  (user || ' Tables in the database:');
   FOR t IN (SELECT table_name FROM user_tables)
   LOOP
      dbms_output.put_line(t.table_name);
   END LOOP;
END;
/
commit;
/
exit    ;

2012. április 18., szerda

Keztet

Elkezdtem egy IT szakmai Blog írását. Eredetileg saját web lapom WordPress blog -jában ( https://mierdekel.hu ) írtam, de ezt megszüntetem és ide átemeltem a tartalmakat.

Itt gyűjtöm össze az alapvető informatikai problémák és megoldásai közben összegyűjtött kapcsolódó információkat.

Ez egy informatikai gyűjtemény mely a munkám során megfogalmazódó kérdések és azokra adott válaszokat tartalmazza.

Remélem más is tudja majd használni.

A a blogomba, annak tartalmában bármilyen hasonlóságot vél felfedezni valaki az csak a véletlen műve lehet.

Az anyag inkább vázlatnak készült melyet elektronikus füzetekké és könyvekké rakom össze.


A témák mélyebb kifejtését másik blogomban ( http://mierdekel.blogspot.hu/ ) teszem meg.

Információk, kapcsolat (Igény Kezelő Rendszer): ( https://mierdekel.hu/ikr/)

Online Oktatás : ( https://mierdekel.hu/klmo )


Magamról : 
53 éves villamos üzem-mérnők és műszaki tanár vagyok.
Már több mint 25 éve informatikai problémákat  oldok meg munkaidőmben és szabadidőmben is.
Sybase és Oracle adatbázis adminisztrátor, sql (plsql, t-sql) fejlesztő, és adatbázis specialista vagyok.

Oracle és SQL server adattárház építéssel és üzleti adatelemzéssel foglalkoztam.

Cognos Poweplay, Power BI, Tableau, Oracle OBIEE, Microsoft SSIS, SSAS és IBM SPSS modeler eszközökkel dolgoztam.

A táblázat kezeléssel még quatro-ban ismerkedtem, de legtöbb elemzést már excel-ben végeztem vagy a végeredményt ebben prezentáltam.

Adatbázis kezelők közül dolgoztam már dBase, foxBase, access, interbase/firebase, mysql, sybase, sqlserver, oracle, postgress, sqlite rendszerekben.

Labirintus generálás ás megoldás python

 A labirintus generálás és megoldás módszerek: Kruskal féle Prim féle rekurzív Backtracker Aldous-Broder növekvő fa Hunt és ölő Wil...