giovedì 14 aprile 2011

Rimuovere la password dai progetti VBA office

Per esigenze di ufficio ho dovuto modificare vecchi database access creati da un collega che ora è andato via dopo aver scaricato una infinità di programmi in versione demo(che ovviamente non hanno funzionato) e passato (il PC non io per fortuna) giornate a provare a forzare la password ho trovato un articoletto su internet che faceva al caso mio (Come rimuovere la password per le Macro VBA da Excel) ripercorro il procedimento visto che era testato su excel.


  1. Apro il programma con un qualsiasi editor esadecimale, come nell'articolo originale io uso notepad++  con il plugin Hex editor (io uso laversione unicode)

  2. Dal menù "Plugins", selezionate "Hex Editor", quindi "View in HEX" (CTRL+ALT+SHIFT+H, se preferite le scorciatoie da tastiera)

  3. Dal menù "Cerca", selezionate "Cerca" e compilate la maschera come indicato in figura (cercate quindi "DPB" in formato Unicode)

  4. Una volta localizzata la stringa, cambiatela in "DPx" (attenzione alle maiuscole e minuscole, è importante)Salvate e chiudete l'editor

  5. Aprire il file Access poi con ALT + F11 aprire il progetto VBA e dare ok quando si presenta l'errore al database come segue (non preoccupatevi sono le nostre modifiche...)

  6. Vi verrà mostrato un "Errore imprevisto (40230)", non ve ne preoccupate e cliccate "OK" sino a che non si aprirà la maschera dell'editor VB
  7. Ora dovreste già vedere gli oggetti VBA che compongono il progetto, ma non abbiamo ancora finito. Dal menù "Strumenti" selezionate "Proprietà di Access9", scheda "Protezione" e, se selezionato, deselezionate "Proteggi progetto dalla visualizzazione" ed inserite una nuova password per proteggere il foglio. (di fatto, state forzando Access a riscrivere correttamente la sezione del file relativa alla protezione).
    Confermate premendo "OK", salvate e chiudete il Database.
  8. Ora potete riaprire il Database e, se lo reputate neccessario, eliminate la password (tornando nella maschera sopra riportata), in modo da non avere più la richiesta quando cercate di visualizzare le proprietà del progetto. 

PS: ovviamente quando sopra riportato è puramente a fini didattici o per accedere a vostri Database dei quali avete dimenticato la password o per i quali siete stati esplicitamente autorizzati dal legittimo proprietario.
Non si risponde di eventuali danni o perdite di dati dovuti all'esecuzione di quanto sopra riportato.

    martedì 22 marzo 2011

    nfs su ubuntu

    Introduzione

    NFS sta per Network File System e indica un filesystem distribuito, ovvero condiviso fra un certo numero di nodi di una rete.

    Alla base di questa tecnica c'è la necessità di accedere e lavorare sulle proprie risorse anche se non si è davanti al proprio computer.

    La delocalizzazione delle informazioni porta tuttavia con sè tutta una serie di problematiche, prima delle quali vi è la coerenza dello stato delle informazioni ed il controllo della sincronizzazione delle modifiche effettuate (poichè UNIX è un sistema operativo multiutente ad un dato istante di tempo N utenti possono tentare di accedere in scrittura ad uno stesso file).

    Installazione

    Per installare il supporto per nfs lato kernel digitare:

    sudo apt-get install nfs-kernel-server


    Configurazione di NFS lato server

    Il pacchetto necessario per il setup del servizio NFS di filesystem distribuito su Linux è nfs-kernel-server che viene gestito con i comandi da shell

    /etc/init.d/nfs-kernel-server start|stop|restart|status


    I servizi correlati con nfs sono :

    /sbin/portmap: gestibile con il comando

    /etc/init.d/portmap start | stop | restart

    /etc/init.d/nfs-common

    /etc/init.d/nfs-kernel-server


    Il file di configurazione lato server è /etc/exports la cui sintassi è della seguente forma:

    [directory da esportare] [host a cui esportarla] ([permessi])

    Un esempio è il seguente :

    /home/administrator *.pascal.org(ro) sola lettura sostituire ro con rw per lettura scrittura


    Questo dice al server NFS di permettere a tutti i client del dominio pascal.org di accedere al filesystem in /home/administrator in modalità di sola lettura.

    Il comando da usare per esaminare i fs montati è :

    showmount



    Per aumentare la sicurezza e la protezione del vostro server NFS dovrete definire la protezione servizi RPC lato server. Il file da editare è /etc/hosts.allow. Il formato di questo file è il seguente:

    Programma:hosts:permissions

    Ad esempio:

    portmap:ALL EXCEPT .org:DENY

    Nega a tutti gli hosts tranne quelli del dominio org l'accesso via RPC al file system distribuito NFS.

    Configurazione dei clients


    Il client che voglia accedere ad una risorsa NFS deve soltanto decidere come montare tale risorsa , se manualmente tramite il comando mount oppure automaticamente ad ogni avvio inserendo mount point e host nel file /etc/fstab.

    Personalmente non consiglio quest'ultima soluzione poichè anche cercando di ottimizzare si va incontro a notevoli problemi di stabilità e sicurezza dei propri sistemi.

    Come montare le risorse esportate:

    Esempio: host B vuole temporaneamente montare la directory /home/administrator condivisa da host A sul suo fs locale /media/exported.

    Il Comando su host B :

    mount -t nfs hostA:/home/administrator /media/exported




    La cartella /media/exported deve essere già creata e disponibile, come questa lo deve essere qualsiasi altra cartella che si desideri utilizzare.

    Come fare se host B vuole montare sempre al boot la directory remota condivisa da host A?

    Modificare il file /etc/fstab su hostB aggiungendo la seguente riga:

    hostA:/home/administrator /media/exported nfs ro 0 0

    martedì 1 marzo 2011

    Collegare .Net a postgresql

    Per collegare .net a Postgresql si deve aprire un nuovo progetto windows form (o terminale se si desidera).
    Scaricare Npgsql da qui e poi dopo aver estratto i file aggiungere il riferimento al file Npgsql.dll in visual studio ricordandosi di inserire
    using Npgsql;
    dopo le dichiarazioni ad inizio della parte codice della form.
    Procedere inserendo un dataGridView che noi chiameremo dataGridView1.
    Poi si vada nel codice del form in cui si vuole visualizzare i dati e si inserisca la parte di codice in grassetto(inserisco la parte completa del codice di Form1.cs),
    Ricordandosi di inserire ; all'interno della stringa alla fine di ogni coppia di valori
    Parola chiave=Valore;
    sapendo che i valori sono
    # Server - specifies the server location
    # User Id - the database user
    # Port - default is 5432
    # Password - the password for the database user
    # Database - the database name

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using Npgsql;

    namespace WindowsFormsApplication1
    {
    public partial class Form1 : Form
    {

    private DataSet ds = new DataSet();
    private DataTable dt = new DataTable();

    public Form1()
    {
    InitializeComponent();
    try
    {
    //creazione stringa di connessione ricordandosi;
    string connstring = "Server=prova;";
    connstring = connstring + "Port=5432;";
    connstring += "User Id=pippo;";
    connstring += "Password=pluto;";
    connstring += "Database=test;";

    //creazione connessione con Npgsql
    NpgsqlConnection conn = new NpgsqlConnection(connstring);
    conn.Open();

    //creazione di una query sql
    string sql = "select * from coimaimp order by cod_impianto limit 100";
    //creazione dataset dalla connsessione
    NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn);


    // resetto il DataSet per essere sicuro che sia vuoto
    ds.Reset();

    // riempio il DataSet con il risultato di NpgsqlDataAdapter
    da.Fill(ds);

    //Selezionamo la prima tabella dato che C# è in grado di gestire più tabelle
    dt = ds.Tables[0];

    //Collego il datagrid al DataTable per visualizzare i dati
    dataGridView1.DataSource = dt;

    //Chiudo la connessione(se non devo fare altre operazioni)
    conn.Close();

    }
    catch (Exception msg)
    {
    //Visualizzo una finestra per sapere cosa è andato storto in caso di errore
    MessageBox.Show(msg.ToString());
    throw;
    }

    }
    }
    }

    giovedì 30 luglio 2009

    disinstallare grub2 e installare grub ubuntu 9.04

    Prima di tutto scaricate una distribuzione live tipo Ubuntu 9.04 o succcessive (obbligatorio in caso di filesystem ext4) dopo aver verificato la presenza del collegamento internet eseguire quanto segue
    Code:
    sudo fdisk -l
    
    Dispositivo Boot      Start         End      Blocks   Id  System
    /dev/sda1   *           1        2496    20049088+  83  Linux
    /dev/sda2            2497        2610      915705    5  Esteso
    /dev/sda5            2497        2610      915673+  82  Linux swap / Solaris
    con questo comando si riesce a vedere su quale disco viene eseguito il boot nel nostro caso su sda1

    dopo aver verificato questo eseguire i seguenti comandi:
    Code:
    sudo mount /dev/sda1 /mnt
    sudo mount --bind /dev /mnt/dev
    sudo mount --bind /proc /mnt/proc
    sudo chroot /mnt
    apt-get purge grub2
    apt-get install grub
    Se i comandi in precedenza non creano errori si continua così:
    Code:
    mv /boot/grub/menu.lst /boot
    rm -fr /boot/grub
    grub-install /dev/sda
    update-grub
    cat /boot/grub/menu.lst
    exit
    Dopo aver lanciato update-grub alla richiesta premere "S" o "y" per creare un nuovo menu.lst, se anche questo termina correttamente si può riavviare ed il gioco è fatto.

    Reply With Quote

    giovedì 16 aprile 2009

    Macro per formule automatiche su riga

    Lo scopo di questo post è spiegare come inserire una riga di formule in vba in excel.
    questo può venire applicato per ad esempio creare una serie di righe contenenti ad esempio formule e valori ripetute per n righe secondo un criterio stabilito o proveniente dalle elaborazioni...
    le funzioni da utilizzare sono:

    • ActiveCell.Offset(rowOffset:="spostamento righe",columnOffset:="spostamento colonne").select
      questo comando serve per rendedre attiva una cella dando lo spostamento dalla corrente
    • ActiveCell.FormulaR1C1 = "=R[-1]C+1"
      questo comando serve per inserire una formula in luguaggio magro utilizzando il riferimento riga colonna per le celle
    • ActiveCell.FormulaR1C1Local = "=somma(r[1]c:r[4]c)
      questo comando a differenza del presente utilizza il linguaggio excel con i riferimenti riga colonna
    Un esempio dell'utilizzo delle precedenti formule in un foglio dove si calcola il piano di ammortamento di un mutuo.

    ActiveCell.FormulaR1C1 = "=R[-1]C+1"
    ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Select
    ActiveCell.FormulaR1C1Local = "=ASS(RATA(rc[6]/r6c2;r7c2--R[-1]C[-1];R[-1]C[5]))+RC[1]"
    ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Select
    ActiveCell.FormulaR1C1Local = "0"
    ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Select
    ActiveCell.FormulaR1C1Local = "=R[-1]C[3]*(RC[4]/R6C2)"
    ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Select
    ActiveCell.FormulaR1C1 = "=RC[4]-RC[-1]"
    ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Select
    ActiveCell.FormulaR1C1 = "=R[-1]C+RC[-1]"
    ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Select
    ActiveCell.FormulaR1C1 = "=R[-1]C-RC[-2]"
    ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Select
    ActiveCell.FormulaR1C1 = "=R[-1]C"
    ActiveCell.Offset(rowOffset:=0, columnOffset:=1).Select
    ActiveCell.FormulaR1C1 = "=R[-1]C"

    venerdì 10 aprile 2009

    Aprire una form"figlia"

    Per aprire una form figlia per esempio da un menu il codice è il seguente:

    Dim frm As New <nome form>
    frm.MdiParent = Me
    frm.Show()

    se invece dopo la realizzazione della form si volesse inserila in un contenitore TabControl
    dopo aver impostato la proprietà FormBorderStyle dei vari form che devono essere inclusi a None si deve lavorare da codice, non con l'editor di WF... inserire nel costruttore del form che contiene il TabControl codice di questo genere:

    Dim frm As New Form3 'o come si chiama il form da inserire nella
    prima TabPage
    frm.TopLevel = False
    frm.Visible = True
    TabPage1.Controls.Add(frm) 'o come si chiama la prima TabPage
    frm = New Form4 'o come si chiama il form da inserire nella
    seconda TabPage
    frm.TopLevel = False
    frm.Visible = True
    TabPage2.Controls.Add(frm) 'o come si chiama la seconda TabPage
    'eccetera

    Eventualmente, se i form dovessero risultare più grandi delle TabPages, impostare la proprietà AutoScroll delle varie TabPages a True perché si possano scorrere.

    Creare finestre Mdi vb.net 2008

    Per creare una struttura di finestre "Padre - Figlio" innanzitutto si deve aggiungere al progetto una nuova form MDI andando su Esplora Soluzioni tasto destro sul nome del progetto selezionare aggiungi e poi Windows Form... . Nella finstra che si presenta selezionare Form Padre MDI" impostarne il nome (molto importante) e il gioco è fatto.
    Se invece la form padre fosse già stata creata impaginata, per evitare di dover rifare tutto il lavoro e sufficiente andare nelle prorietà della form e impostare a true la proprietà IsMdiContainer.