mercoledì 30 dicembre 2009

Numerare le righe in SQL

Per numerare le righe in una select di SQL è sufficiente utilizzare il seguente codice:

SELECT ROW_NUMBER() OVER(ORDER BY IdTabella) AS Numero
FROM Tabella

martedì 15 dicembre 2009

Visualizzare il log di Sql Server

Per visualizzare le operazioni eseguite da Sql Server è possibile utilizzare l'oggetto Profiler (non presente nelle versioni express)
Per aprirlo dal management di sql server aprire Strumenti > Sql Profiler
Creare una traccia (prima icona a sx)
Togliere dalla seconda tab le opzioni non necessarie, eseguire e vedremo in diretta tutte le operazioni eseguite dal Sql Server.

A fine procedura stoppare la traccia e chiudere.

lunedì 9 novembre 2009

Gestione Condizione in trasformazioni XSLT

Nelle trasformazioni XSLT è possibile utilizzare il costrutto CHOOSE, una specie di Select Case del vb.
Nella condizione è possibile utilizzare più di un parametro utilizzando le parole chiave "and" e "or" rigorosamente in MINUSCOLO!!!

es.

xsl:choose>
xsl:when test="IdCategoriaAnnuncio = 15 or IdCategoriaAnnuncio = 21">
!-- Quello che si vuole inserire -->
/xsl:when>
/xsl:choose>

lunedì 2 novembre 2009

Modificare i prerequisiti in Visual Studio per i Setup

per modificare le procedure di setup è possibile modificare direttamente i Prerequisiti che Visual Studio installa in fase di setup.
Per la modifica di un'installazione Sql Express, ad esempio, troviamo nella cartella

C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\SqlExpress\it

per Visual Studio 2005,
mentre per Visual Studio 2008 lo troviamo in:

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bootstrapper\Packages\SqlExpress\en

il file package.xml, andando a modificare i parametri per il comando di esecuzione è possibile modificare ad esempio il nome dell'istanza e la password per l'utente sa

command packagefile="sqlexpr32.exe" arguments="-q /norebootchk /qn reboot=ReallySuppress addlocal=all instancename=NOMEISTANZA SAPWD=PASSWORDSA SQLAUTOSTART=1" estimatedinstalledbytes="225000000" estimatedtempbytes="225000000" estimatedinstallseconds="420"

CORREZIONE!
Ho notato che se modifichiamo il nome dell'istanza al tentativo di installazione non si rende conto che una versione di SqlServer è già installata.. è comunque possibile mantenere la password inserita
Quindi questa è la versione corretta:

command packagefile="sqlexpr32.exe" arguments="-q /norebootchk /qn reboot=ReallySuppress addlocal=all instancename=SQLEXPRESS SAPWD=PASSWORDSA SQLAUTOSTART=1" estimatedinstalledbytes="225000000" estimatedtempbytes="225000000" estimatedinstallseconds="420"

modificare impostazioni MSDTC con Vista

per modificare le impostazioni MSDTC in vista eseguire la seguente istruzione:
dcomcnfg

dopo impostare l'msdtc sotto Servizi Componenti > Computer > Computer Locale > Distributed Transaction Coordinator >
tasto destro su DTC locale e da proprietà troviamo le impostazioni dell'MSDTC.

giovedì 8 ottobre 2009

Full-Text Search su SQL Server 2008

--Abilitare il funzionamento del fulltext search sui pdf
--installare il pdf IFilter di Foxit (o similari)
--installare l' IFilter per Office 2007 in modo da abilitare la ricerca sui documenti di office 2007
--Eseguire le 2 store procedure che abilitano i cambiamenti appena effettuati

exec sp_fulltext_service 'load_os_resources', 1
exec sp_fulltext_service 'verify_signature', 0;


--Riavviare il servizio SQL

exec sp_fulltext_service 'update_languages'
exec sp_fulltext_service 'restart_all_fdhosts';


--Verificare l'abilitazione dell'estensione funzionante
select document_type, path from sys.fulltext_document_types where document_type = '.docx'
select document_type, path from sys.fulltext_document_types where document_type = '.pdf'


--Creare un indice per la tabella interessata
--Generazione del catalogo
--CatalogoFiles = nome catalogo
--TbFiles = nome tabella
--PK_tbFiles_1 = nome Indice della tabella
--FileType = campo della tabella che contiene l'estensione del file

exec sp_fulltext_database @action='Enable'
exec sp_fulltext_catalog 'CatalogoFiles', 'create'
exec sp_fulltext_table 'TbFiles', 'create', 'CatalogoFiles', 'PK_tbFiles_1'
exec sp_fulltext_column 'TbFiles', 'systemFile', 'add', @type_colname='FileType'
exec sp_fulltext_table 'tbFiles', 'activate'
exec sp_fulltext_catalog @ftcat='CatalogoFiles', @action='start_full'
exec sp_fulltext_table 'TbFiles', 'Start_change_tracking'
exec sp_fulltext_table 'TbFiles', 'Start_background_updateindex'


--Sintassi per l'eliminazione del catalogo
exec sp_fulltext_table 'TbFiles', 'drop'
exec sp_fulltext_catalog @ftcat='CatalogoFiles', @action='drop'


--Ricerca del testo desiderato
-- FREETEXT Predicato utilizzato per eseguire una ricerca su colonne che contengono tipi
-- di dati carattere per valori corrispondenti al significato e non all'esatta formulazione
-- del testo nelle condizioni di ricerca. Se si utilizza FREETEXT,

select * from tbFiles where FREETEXT (systemFile, 'via Garibaldi')

--Predicato utilizzato in una clausola WHERE per eseguire ricerche in colonne contenenti
-- dati di tipo carattere per corrispondenze esatte
-- e se vogliamo combinare più parole per la ricerca abbiamo bisogno di aggiungere "and" o "or" nella ricerca.

select * from tbFiles where CONTAINS (systemFile, 'via OR Garibaldi')

giovedì 24 settembre 2009

Modificare valore campo AutoIncrement in MySQL

ALTER TABLE TableName AUTO_INCREMENT = Valore

martedì 22 settembre 2009

Scaricare immagini dal web lato codice

Per scaricare un'immagine dal web in locale è sufficiente il seguente frammento di codice:

Dim client As New System.Net.WebClient
client.DownloadFile("http://www.sitoweb.com/foto/appartamento.jpg", "C:\immagine.jpg")

martedì 8 settembre 2009

Aggiungere modulo di una stampante in Windows 7

Per aggiungere (o modificare) i moduli delle stampanti in windows 7, selezionare la stampante desiderata, cliccare su Proprietà server di stampa, e modificare i moduli a piacimento

venerdì 4 settembre 2009

Convertire un DataGridViewRow in DataRow

Ecco come convertire la riga selezionata di una griglia in una DataRow.

CType(grid.SelectedRows(0).DataBoundItem, DataRowView).Row

martedì 11 agosto 2009

Contare il numero di indici di una tabella MySql

per contare il numero di indici di una tabella in MySql utilizzare il seguente script:

SELECT COUNT(*) FROM information_schema.statistics
where table_schema = 'DBname' and table_name = 'TabName' and index_name = 'IndexName'

mercoledì 5 agosto 2009

Impostare la lingua per lo Script Manager

Come ottimamente suggerito da Carlo, è possibile impostare la lingua dei controlli ajax semplicemente impostando la localization dello script manager:

asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptLocalization="true" EnableScriptGlobalization="true" />

lunedì 3 agosto 2009

Visualizzare Date e Decimal in griglia DevExpress WPF

Colonna per visualizzare interi senza virgola

dxg:GridColumn FieldName="NPZ_ART_CONF" Header="Paia" >
dxg:GridColumn.EditSettings>
dxe:TextEditSettings >
dxe:TextEditSettings.Mask >
dxe:MaskProperties MaskType="Numeric" EditMask="n"/>
/dxe:TextEditSettings.Mask>
/dxe:TextEditSettings>
/dxg:GridColumn.EditSettings>
/dxg:GridColumn>

in CodeBehind
Dim col As New DevExpress.Wpf.Grid.GridColumn
Dim txt As New DevExpress.Wpf.Editors.Settings.TextEditSettings
Dim mask As New DevExpress.Wpf.Editors.MaskProperties
mask.MaskType = DevExpress.Wpf.Editors.MaskType.Numeric
mask.EditMask = "n"
txt.Mask = mask
col.FieldName = "NPZ_ART_CONF"
col.EditSettings = txt


Colonna per visualizzare date non popolate se dataset risponde campo Null

dxg:GridColumn FieldName="DataScadenza" Header="DataScadenza" >
dxg:GridColumn.EditSettings>
dxe:TextEditSettings >
dxe:TextEditSettings.Mask>
dxe:MaskProperties MaskType="None" EditMask="dd MM yyyy" AutoComplete="None" />
/dxe:TextEditSettings.Mask>
/dxe:TextEditSettings>
/dxg:GridColumn.EditSettings>
/dxg:GridColumn>

in CodeBehind
Dim col As New DevExpress.Wpf.Grid.GridColumn
Dim txt As New DevExpress.Wpf.Editors.Settings.TextEditSettings
Dim mask As New DevExpress.Wpf.Editors.MaskProperties
txt.DisplayFormat = "dd/MM/yyyy"
mask.AutoComplete = DevExpress.Wpf.Editors.AutoCompleteType.None
txt.Mask = mask
col.FieldName = "DataScadenza"
col.EditSettings = txt
GridControl2.Columns.Add(col)



Colonna per visualizzare numeri con 2 decimali

dxg:GridColumn.EditSettings>
dxe:TextEditSettings DisplayFormat="#0.00" >
dxe:TextEditSettings.Mask>
dxe:MaskProperties MaskType="Numeric" />
/dxe:TextEditSettings.Mask>
/dxe:TextEditSettings>
/dxg:GridColumn.EditSettings>
/dxg:GridColumn>

in CodeBehind
col = New DevExpress.Wpf.Grid.GridColumn
txt = New DevExpress.Wpf.Editors.Settings.TextEditSettings
mask = New DevExpress.Wpf.Editors.MaskProperties
mask.MaskType = DevExpress.Wpf.Editors.MaskType.Numeric
txt.Mask = mask
txt.DisplayFormat = "#0.00"
col.FieldName = "Prezzo"
col.EditSettings = txt
GridControl2.Columns.Add(col)

venerdì 17 luglio 2009

Resettare l'ID in una tabella SQL

DBCC CHECKIDENT (tableName, RESEED, 1)

mercoledì 24 giugno 2009

Backup dei DB in SqlServer

Tramite questo script è possibile eseguire il backup di tutti i databasi di SqlServer, meno quelli di sistema ovviamente.


DECLARE @name VARCHAR(50) -- Nome del Database
DECLARE @path VARCHAR(256) -- Cartella destinazione file di backup
DECLARE @fileName VARCHAR(256) -- Nome file di backup
DECLARE @fileDate VARCHAR(20) -- Data file di backup (accodata a @fileName)
DECLARE @SqlStatment VARCHAR(MAX) -- Statement T-SQL che esegue il backup

SET @path = 'F:\TEST\'

SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)

DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases
WHERE name NOT IN ('master','model','msdb','tempdb')
ORDER BY name

OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name

WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Elaborazione backup ' + @name + ' in corso...' + CHAR(13)

SET @fileName = @path + @name + '_' + @fileDate + '.BAK'

SET @SqlStatment = 'BACKUP DATABASE ' + @name + ' TO DISK = ''' + @fileName +
''' WITH NOFORMAT, INIT, NAME = N''' + @name + ' - Completo Database Backup''' + ', SKIP, NOREWIND, NOUNLOAD, STATS = 10'

EXEC (@SqlStatment)
PRINT CHAR(13) + 'Elaborazione backup ' + @name + ' terminata!' + CHAR(13)

FETCH NEXT FROM db_cursor INTO @name
END

CLOSE db_cursor
DEALLOCATE db_cursor

venerdì 12 giugno 2009

ricavare tipo dei campi dal database

Per ricavare il tipo dei campi dal database basta eseguire la seguente procedura

public sub RicavaCampi()
Dim dtType As DataTable = getTables()
For Each row As DataRow In dtType.Rows
If Not row(2).Equals("sysdiagrams") Then
Dim res(3) As String
res(2) = row(2) 'nome della tabella
If res(2).Equals("Categories") Then
Dim dtCol As DataTable = _Connection.GetSchema("Columns", res)
If dtCol.Rows.Count > 0 Then
dim colName as string

dim colType as string
For Each col As DataRow In dtCol.Rows
colName = col("COLUMN_NAME")
colType = col("DATA_TYPE")
Next
End If
End If
End If
Next
end sub



Public Function getTables() As DataTable
_Connection.Open()
If Not IsNothing(_Connection) Then
Dim restriction(3) As String
restriction(3) = "BASE TABLE"
Dim dtTables As DataTable = _Connection.GetSchema("Tables", restriction)

Return dtTables
Else
Throw New Exception("Nessuna Connessione attiva...")
End If
_Connection.Close()
End Function

martedì 14 aprile 2009

Connessione a SqlServer da remoto

E' possibile collegarsi ad un DB SQL Server da remoto tramite la seguente stringa di connessione:


Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=myDataBase;User ID=myUsername;Password=myPassword;

E' fondamentale settare il firewall affinchè abiliti l'accesso alla porta 1433.

Convertire un campo DB da float a datetime

Per convertire un campo di un database dal formato float (18.9831) a formato orario (18.59) basta utilizzare la seguente procedura

convert(datetime, (select dateadd(second, op_orachia * 3600, '2000-01-01 00:00:01'))) as OraChiamata

martedì 10 marzo 2009

Personalizzazione di una ComboBox con DataTemplate

Windows Presentation Foundation contiene numerosi controlli volti a caricare informazioni e ad interagire con l'utente che rispecchiano nello stile e nelle funzionalità gli elementi Win32. La libertà è comunque massima così come la personalizzazione nell'interfaccia. Tipica è l'esigenza di una ComboBox che deve essere arricchita non limitandosi al semplice testo, ma mostrando anche immagini per ogni elemento.
L'uso di una ComboBox è piuttosto semplice, così come il suo popolamento mediante una collezione di ComboBoxItem:

ComboBox SelectedIndex="0">
ComboBoxItem> Yellow /ComboBoxItem>
ComboBoxItem> Green /ComboBoxItem>
/ComboBox>


Solitamente però, si utilizzano le funzionalità di binding per caricare automaticamente i dati, anche in formato XML:

Canvas>
Canvas.Resources>
XmlDataProvider x:Key="colors" XPath="/items/item">
x:XData>
items xmlns="">
item color="Red" />
item color="Yellow" />
item color="Blue" />
item color="Green" />
/items>
/x:XData>
/XmlDataProvider>
/Canvas.Resources>
ComboBox SelectedIndex="0" ItemsSource="{Binding Source={StaticResource colors}}"
DisplayMemberPath="@color" />
/Canvas>


Con la proprietà ItemsSource indichiamo qual è la sorgente da utilizzare, mentre con DisplayMemberPath specifichiamo qual è il path (in questo caso l'attributo) da mostrare come testo per ogni item. Possiamo però personalizzare e decidere in dettaglio l'aspetto di ogni item inserendo qualsiasi Visual presente in WPF: controlli, immagini e perfino video. Per fare ciò con la proprietà ItemTemplate possiamo indicare, definendo come risorsa o inline per la solo ComboBox, un DataTemplate da utizzare per ogni item.

ComboBox SelectedIndex="0" IsEditable="true" TextSearch.TextPath="@color"
ItemsSource="{Binding Source={StaticResource colors}}">
ComboBox.ItemTemplate>
DataTemplate>
StackPanel Margin="2" Orientation="Horizontal">
Rectangle Width="25" Height="25" Fill="{Binding XPath=@color}" />
TextBlock FontSize="15" Text="{Binding XPath=@color}" />
/StackPanel>
/DataTemplate>
/ComboBox.ItemTemplate>
/ComboBox>


All'interno di un template lo scope di binding è relativo al singolo item che stiamo caricando, perciò ci è concesso fare riferimento direttamente agli attributi dell'elemento item della sorgente. Nell'esempio disegniamo un rettangolo e una scritta relativi al colore corrente. Una menzione particolare la meritano le proprietà IsEditable e TextSearch.TextPath. La prima indica che la ComboBox è editabile e l'utente può immettere del testo di ricerca. La seconda è una attached property sull'oggetto TextSearch e ci permette di indicare qual è la proprietà sulla quale fare lookup per ogni ricerca che l'utente effettua. E' importante impostare questo path perché personalizzando il layout degli item il motore non è in grado di sapere qual è il testo rappresentativo dell'elemento. Il risultato di questa personalizzazione è il seguente, dove digitando "G" viene automaticamente suggerita la voce "Green".

Aggiungere un Font alle risorse

Per aggiungere un font alle risorse è sufficiente aggiungerlo in una cartella del progetto, e dal controllo settare

FontFamily="Resources\#Onuava"

in questo modo verrà utilizzato questo font anzichè quello di default

Update in SQL, come inserire una datetime

L'update di un campo in SQL si fa così:

UPDATENome_Tabella
SETNome_Colonna = Nuovo_Valore
WHERENome_Colonna = Un_Valore

Per aggiornare più colonne:



UPDATENome_Tabella
SETNome_Colonna1 = Nuovo_Valore1
, Nome_Colonna2 = Nuovo_Valore2
, Nome_Colonna3 = Nuovo_Valore3
WHERENome_Colonna = Un_Valore

Per inserire un valore DateTime:




UPDATENome_Tabella
SETNome_Colonna = convert(datetime,'31122099')
WHERENome_Colonna = Un_Valore

lunedì 9 marzo 2009

Progetto Setup, impostare TextBox Criptato

Tools
The only tool you need is ORCA. ORCA is a Microsoft utility for modifying and validating Windows Installer packages. It is a database tool created for setup authors and administrators who work with the Windows Installer Service. This utility is a part of the Windows Installer SDK download along with other MSI related tools.
You can use ORCA to open and modify MSI packages.
To download and install ORCA, follow these steps:
Visit the SDK Platform Site page to download the Windows Installer SDK. The link to Windows Installer SDK should be on the left hand side frame on the above site.
Click on that link to go to the next page to download Windows Installer SDK, which includes ORCA.
After downloading and installing Windows Installer SDK, go to \Program Files\Microsoft SDK\Bin folder on the machine to look for Orca.msi.
Run Orca.msi by double clicking on it, which is the setup to install ORCA on your machine.
After installing ORCA on your machine, you will be able to right click on any MSI package and open it in ORCA.
Using the code
The first thing to do, is generate our VS.NET setup project and identify our future password textbox. You can see Edit2Property in our example that is EDITA2.


Now, we start to modify the MSI to enable our password text changing attributes for our textbox EDITA2.
First of all, we've to start ORCA and open the MSI file generated by VS.NET, and go to 'Control' table.



Normally, all textboxes are called CustomTextA, and we've to identify our textbox by Property column. In our case, we can see our row, has '7' as attributes. Let's go to see what means this '7'.
The attributes are set in binary format, so '7' is 111. 100 + 10 + 1 and this is 4 + 2 + 1 in decimal format. Now, we can go to control attributes table here and check what attributes are 4,2,1.
We can see that our textbox has the following properties: Enabled, Sunken and Visible. Now, check that there's an advance properties table for textboxes, and there's a Password property with value 2097152.
Now we have to add this property to the initial property value (7). 2097152 + 7 = 2097159, that's our new property value. Set in attributes cell and save the MSI File.
Now, check your MSI, and you could see that our textbox is a password textbox!!!

martedì 10 febbraio 2009

Verificare Administrator della macchina

Per sapere se l'utente attualmente loggato è l'amministratore:


bool IsAnAdministrator()
{

WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(identity);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}

lunedì 9 febbraio 2009

abilitare la scrittura per una colonna della DxGrid

Per abilitare la scrittura di una colonna della griglia DxGrid della DevExpress è necessario aggiungere al controllo la sezione che gestisce la View e settare la NavigationStyle = CellNavigation.

dxg:GridControl.View>
dxg:GridColumnView NavigationStyle="CellNavigation" Name="GridColumnView" AllowEditing="True">
/dxg:GridColumnView>
/dxg:GridControl.View>


Inoltre se la sorgente dati della griglia viene caricata dinamicamente dobbiamo fare attenzione a non impostare il valore di default della colonna, altrimenti non avremo la possibilità di modificare il contenuto.

dtFiltra.Columns.Add("IsSelected", System.Type.GetType("System.Boolean"))

giovedì 29 gennaio 2009

ContextMenu in WPF

Per aggiungere un ContextMenu ad un bottone basta inserire il seguente Codice.

Per Gestire l'evento click degli elementi basta attivarlo su ogni MenuItem.

Button.ContextMenu>
ContextMenu Padding="0" Margin="0" Name="ContextMenu1">
MenuItem Name="MenuItem1">
MenuItem.Header>
TextBlock Text="Option 1" VerticalAlignment="Center">
/TextBlock>
/MenuItem.Header>
MenuItem.Icon>
Border Background="LightGray" Padding="2">
Image Source="Resources/MSG_Error.png" Width="{StaticResource ImageSize}" Height="{StaticResource ImageSize}">
/Image>
/Border>
/MenuItem.Icon>
/MenuItem>/ContextMenu>
/Button.ContextMenu>

mercoledì 28 gennaio 2009

Posizione di una colonna in una griglia DxGrid

Per calcolare la posizione di una colonna nella griglia DxGrid:

Dim visibleIndex As Integer = DevExpress.Wpf.Grid.GridColumn.GetVisibleIndex(column)

martedì 27 gennaio 2009

DialogResult in WPF

In WPF la logica del DialogResult è leggermente diversa da quella delle WindowsForm, infatti i valori che può assumere una DialogResult sono True o False (False è il predefinito).

In una finestra di dialogo è in genere disponibile un pulsante speciale per l'annullamento, che corrisponde al pulsante la cui proprietà IsCancel è impostata su true. Un pulsante configurato in questo modo consente di chiudere automaticamente una finestra quando un utente lo seleziona o preme ESC. In entrambi i casi, DialogResult rimane false.
In una finestra di dialogo è in genere disponibile anche un pulsante speciale per l'accettazione, che corrisponde al pulsante la cui proprietà IsDefault è impostata su true. Un pulsante configurato in questo modo genererà l'evento Click quando l'utente lo seleziona o preme INVIO. Tuttavia, la finestra di dialogo non verrà chiusa automaticamente e DialogResult non verrà impostata su true. È necessario scrivere manualmente questo codice, in genere dal gestore dell'evento Click per il pulsante predefinito.
Dopo la chiusura di una finestra di dialogo, è possibile ottenere il risultato dal valore restituito dal metodo ShowDialog o controllando la proprietà DialogResult.
DialogResult può essere impostata solo quando un oggetto Window viene aperto chiamando il metodo ShowDialog.
Esempio Apertura ShowDialog:

MyDialog dialog = new MyDialog();
dialog.ShowDialog();
if (dialog.DialogResult.HasValue && dialog.DialogResult.Value)
MessageBox.Show("User clicked OK");
else
MessageBox.Show("User clicked Cancel");


nella Window ShowDialog sono inseriti 2 bottoni (Ok, e Cancel) così gestiti:

Button Width="100" Content="OK" IsDefault="True" Click="ButtonOkClick"/
Button Width="100" Content="Cancel" IsCancel="True"/


e l'evento del bottone OK va ad impostare il valore della ShowDialog:

DialogResult = true;

Aggiungere un'immagine delle risorse in WPF

Per aggiungere un'immagine contenuta nelle risorse del progetto in WPF basta utilizzare il seguente codice (facendo attenzione ad impostare la proprietà dell'immagine Build Action a Resources)


pctIcon.Source = New BitmapImage(New Uri("Resources/MSG_OK.png", UriKind.Relative))

Attenzione, se l'oggetto nel quel vogliamo inserire l'immagine è in una sottocartella rispetto alla root, per accedere alle risorse è necessario aggiungere una / prima dell'indirizzo dell'immagine.
es.

pctIcon.Source = New BitmapImage(New Uri("/Resources/MSG_OK.png", UriKind.Relative))

lunedì 26 gennaio 2009

Funzione VBScript che dato un indirizzo E-mail testa se è valido o meno.

If isValidEMail("IndirizzoE-Mail") Then
MsgBox("Indirizzo valido")
Else
MsgBox("Indirizzo non valido")
End If

function IsValidEmail(email)
isitvalid = true
dim names, name, i, c
names = Split(email, "@")
if UBound(names) <> 1 then
isitvalid = false
exit function
end if
for each name in names
if Len(name) <= 0 then
isitvalid = false
exit function
end if
for i = 1 to Len(name)
c = Lcase(Mid(name, i, 1))
if InStr("abcdefghijklmnopqrstuvwxyz_-.", c) <= 0 and not IsNumeric(c) then
isitvalid = false
exit function
end if
next
if Left(name, 1) = "." or Right(name, 1) = "." then
isitvalid = false
exit function
end if
next
if InStr(names(1), ".") <= 0 then
isitvalid = false
exit function
end if
i = Len(names(1)) - InStrRev(names(1), ".")
if i <> 2 and i <> 3 then
isitvalid = false
exit function
end if
if InStr(email, "..") > 0 then
isitvalid=false
Exit Function
end If
IsValidEmail = isitvalid
End Function

venerdì 23 gennaio 2009

Inviare una e-mail tramite VBScript

Per inviare una e-mail tramite linguaggio VBScript utilizzare il seguente codice:

Dim SendMail Set SendMail = CreateObject("CDO.Message")
SendMail.From = "Indirizzo del mittente"
SendMail.To = "Indirizzo del Destinatario"
SendMail.Subject = "e-mail di prova inviata con un VBScript"
SendMail.HTMLBody = "Inserire qui il testo del messaggio con i Tag HTML"
SendMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
SendMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "indirizzo smtp del server di posta"
SendMail.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = "25" SendMail.Configuration.Fields.Update
SendMail.Send

giovedì 22 gennaio 2009

Expander WPF

Per far funzionare corretamente un Expander WPF è sufficiente metterlo all'interno di una griglia, in una riga la cui height è impostata ad "Auto":

Grid>
Grid.RowDefinitions>
RowDefinition Height="Auto"/>
RowDefinition />
/Grid.RowDefinitions>
Expander Header="Exp di prova">
StackPanel>
TextBox />
Button Content="Ciao" />
/StackPanel>
/Expander>
Button Content="Fuori dall'expander" Grid.Row="1" Height="25" />
/Grid>

venerdì 9 gennaio 2009

Aggiungere un CheckBox Column ad un DXGrid (DevExpress) WPF

per aggiungere una colonna di checkbox in una griglia DXGrid basta inserire un codice:


my:GridColumn FieldName="ImportThis" Header="Import" Width="60"
my:GridColumn.CellTemplate
DataTemplate
CheckBox IsChecked="{Binding Path=ImportThis}" HorizontalAlignment="Center" /
/DataTemplate
/my:GridColumn.CellTemplate
/my:GridColumn

giovedì 8 gennaio 2009

Passare stringa di valori come parametro di una query

E' possibile che ci sia la necessità di passare ad una query una serie di parametri in formato stringa concatenata.
per risolvere la questione ecco come ricavare i vari valori:
In SqlServer:
SELECT *
FROM t
WHERE (',' + @ElencoIdSedi + ',') LIKE ('%,' + ltrim(rtrim(str(t.IdSede))) + ',%')

In MySQL:
SELECT *
FROM t
where concat(',', ElencoIdSedi,',') LIKE concat('%,', t.IdSede, ',%') ;