Tõmbame voolu tarbimist koomale

Windows 7 ja Windows Server 2008 R2 operatisoonisüsteemidega tuleb kaasa tore programm, mis jagab soovitusi ja annab teada, kust on arvuti voolutarbimise pealt võimalik kokku hoida. Selleks tuleb administraatorina käivitada käsurida nagu pildil(Pilt 1) näha on ja sisestada sinna käsk.

powercfg /energy

Pilt 1. Käivita käsurida administraatorina

Tulemuseks on c:\windows\system32\ asuv fail energy-report.html, mis tuleb avamiseks Desktopile kopeerida.

Pilt 2. energy-report.html

Minu meelest on tegemist päris kasuliku tööriistaga.

Exceli makro abil valitud lahtrite sisu andmebaasi saatmine

Hiljuti tekkis mul vajadus võtta Excelist andmed ja sisestada need andmebaasi. Lihtne oleks see asi olnud siis kui kõik Exceli failides olevad andmed oleksid ühessuguse asetusega sest siis saaksin kasutada SQL Serveri importimise tööriista. Kuna minul olid väärtused laiali erinevates tulpades ja erinevates ridades tuli midagi kavalamat väljamõelda.

Esimene samm…

Excelist andmebaasile ligipääsemiseks on vaja luua andmebaasi ühendus ja VbScript’is käib see järgnevalt:

Sub Andmebaasi ()
    '--Andmebaasi ühenduse objekt--'
    Set oConn = CreateObject("ADODB.Connection")

    '--Andmebaasi ühenduse connection string--'
    sConnectionString = "Provider=SQLOLEDB.1;Data Source=SERVER\ANDMEBAASIMOOTOR;Initial Catalog=TEST"

    '--Loome andmebaasi ühenduse--'
    oConn.Open sConnectionString, "kasutajanimi", "parool"

    '--Lihtne käsklus--'
    oConn.Execute "INSERT INTO TestTabel (tulp1,tulp2) VALUES ('Esimene','Teine')"

   '--Sulgeme ühenduse--'
   oConn.Close
   Set oConn = Nothing

End Sub

Olulised punktid

  • Rida 6 kus me määrame, millise andmebaasiga ühenduda. Näiteks masinas nimega TEST kus on SQL Server 2008 Express installeeritud on Data Source väärtuseks “TEST\sqlexpress”. Samamoodi on oluline valida õieti Initial Catalog, mis määrab andmebaasi nime kuhu soovitakse ühenduda s.t hetkel TEST
  • Rida 9 et õieti saaksid märgitud andmebaasiga ühendumiseks vajalikud kasutajanimi ja parool

Teine samm …

Valitud teksti andmebaasi lisamiseks võib käituda mitut moodi, aga mina otsutstasin selle kasuks, et lasen skriptil For tsükkli abil oma valikutest iga rea kohta insert lause teha.

Pilt 1 - Excel data

Ülaltoodud pildil on näidisandmed ja sealt on mul vaja sisestada andmebaasi kas Tulp1-Tulp2 andmed või Tulp1-Tulp3 andmed nagu toodud Piltidel 2 ja 3

Pilt 2. - Valikuvõimalus 1

Pilt 2 - Valikuvõimalus 2

Selleks, et vajalikud andmed kätte saada kirjutasin järgmised read

'--Insert lause algus--'
sInsertValues = "Insert into TestTabel(Number1,Number2) values "

If Selection.Areas.Count Mod 2 = 0 Then '--Kui valikualasi on rohkem kui üks ja need on paaris--'
    '--Käib läbi kõikide valikualade paaride--'
    For j = 1 To Selection.Areas.Count Step 2
         '--Käib läbi kõikide valikualade paaride väärtuste ja loob insert lause ning saadab selle andmebaasi---'
         For i = 1 To Selection.Areas(j).Cells.Count
              oConn.Execute = sInsertValues & "('" & Selection.Areas(j).Cells(i).Value & "','" & Selection.Areas(j + 1).Cells(i).Value & "')"
         Next
    Next
ElseIf Selection.Areas.Count > 1 Then
    MsgBox "Wrong relations count"
Else
    '--Kui tegemist on kõrvuti asetsevate tulpadega mis on ühes valikualas--'
    For Each codeRow In Selection.Rows
        oConn.Execute = sInsertValues & "('" & codeRow.Columns(1).Value & "','" & codeRow.Columns(2).Value & "')"
    Next
End If

Selles koodis toimub küll palju segast, aga põhimõtteliselt on nii, et Exceli valikuala/d saab kätte Selection attribuudi alt. Kui on valitud mitte kõrvuti asuvad read või tulbad siis tuleb kasutada Areas atribuuti, mis võimaldab erinevatel valikualadel vahet teha.

Olulised punktid

  • Antud koodi miinuseks on see, et kui näiteks Pilt 1 toodul andmetest valida väärtused A2 ja A4 ning siis B2 ja B4 ei pane ta kokku mitte A2 ja B2 vaid A2 ja A4, sest valimise järjekord on siin oluline.

Kolmas samm…

Paneme loodud koodijupid kokku.

Sub Andmebaasi ()
    '--Andmebaasi ühenduse objekt--'
    Set oConn = CreateObject("ADODB.Connection")

    '--Andmebaasi ühenduse connection string--'
    sConnectionString = "Provider=SQLOLEDB.1;Data Source=SERVER\ANDMEBAASIMOOTOR;Initial Catalog=TEST"

    '--Loome andmebaasi ühenduse--'
    oConn.Open sConnectionString, "kasutajanimi", "parool"

    '--Insert lause algus--'
    sInsertValues = "Insert into TestTabel(Number1,Number2) values "

    If Selection.Areas.Count Mod 2 = 0 Then '--Kui valikualasi on rohkem kui üks ja need on paaris--'
        '--Käib läbi kõikide valikualade paaride--'
        For j = 1 To Selection.Areas.Count Step 2
            '--Käib läbi kõikide valikualade paaride väärtuste ja loob insert lause ning saadab selle andmebaasi---'
            For i = 1 To Selection.Areas(j).Cells.Count
                oConn.Execute = sInsertValues & "('" & Selection.Areas(j).Cells(i).Value & "','" & Selection.Areas(j + 1).Cells(i).Value & "')"
            Next
        Next
    ElseIf Selection.Areas.Count > 1 Then
        MsgBox "Wrong relations count"
    Else
        '--Kui tegemist on kõrvuti asetsevate tulpadega mis on ühes valikualas--'
        For Each codeRow In Selection.Rows
            oConn.Execute = sInsertValues & "('" & codeRow.Columns(1).Value & "','" & codeRow.Columns(2).Value & "')"
        Next
    End If

    '--Sulgeme ühenduse--'
    oConn.Close
    Set oConn = Nothing

End Sub

Sedasi sain mina omad asjad tehtud …

Põnev SQL Server 2008 käsk

SQL Server 2008 tõi endaga kaasa süntaksi muudatuse, mille abil on oluliselt lihtsam sisestada tabelisse mitu rida korraga;

Vanasti käis see nii;

USE YourDB
GO

INSERT INTO MyTable (FirstCol, SecondCol) 
VALUES ('First',1);
INSERT INTO MyTable (FirstCol, SecondCol)
VALUES ('Second',2);
INSERT INTO MyTable (FirstCol, SecondCol)
VALUES ('Third',3);
INSERT INTO MyTable (FirstCol, SecondCol)
VALUES ('Fourth',4);
INSERT INTO MyTable (FirstCol, SecondCol)
VALUES ('Fifth',5);

GO

Või nii:

USE YourDB
GO

INSERT INTO MyTable (FirstCol, SecondCol)
SELECT 'First' ,1
UNION ALL
SELECT 'Second' ,2
UNION ALL
SELECT 'Third' ,3
UNION ALL
SELECT 'Fourth' ,4
UNION ALL
SELECT 'Fifth' ,5

GO

Uue käsu abil on süntaks lühem ja minumeelest ka üsna lihtsalt arusaadav:

USE YourDB
GO

INSERT INTO MyTable (FirstCol, SecondCol)
VALUES ('First',1),
('Second',2),
('Third',3),
('Fourth',4),
('Fifth',5)

GO

Hyper-V virtuaalmasinasse bootimine

Üks põhilisi omadusi, mis ajendas mind Hyper-V lahendust proovima on Windows 7 ja Windows Server 2008 R2 võime bootida VHD failist js see, et sama failiformaati kasutab ka Hyper-V. Bootimine VHD faili muudab kõvaketta operatsioone küll mõnevõrra aeglasemaks, fikseeritud suurusega failide puhul ca 5% ning dünaamiliselt suurust muutvate failide puhul veidi rohkem, kuid reaalses elus seda ei märka. Seevastu hiljem arvutile puhta Windowsi peale panek on aga oluliselt lihtsam ning backupi tegemine, mis on lihtsalt VHD ümberkopeerimise vaev.

Hyper-V virtuaalmasin “pärismasinaks”

Mina alustasin nii, et lõin uue virtuaalmasina nimega “Clean” installisin sinna peale kõik uuendused ning panin masina kinni. Kopeerisin loodud .vhd faili uude asukohta ning lõin uue virtuaalmasina nimega “Development”, kuhu peale installisin Visual Studio 2010, SQL Server Express 2008 R2, Office 2010, Expression Studio 4.0 ning kõik teised vajalikud programmid. Aega kulus sellepeale tund, kuid tulemusena on mul olemas kaks virtuaalmasinat üks täiesti puhata installiga ning teine igati sobilik arendustegevuseks.

Installatsioon
Bootiva süsteemi ülesseadmiseks teen kõigepealt Copy-Paste ja loon koopia “Development'” masina VHD failist.

Seejärel loon uue virtuaalmasina ja sean selle kõvakettaks kopeeritud D:\Boot.vhd faili.

Virtuaalmasina ülesseadmine bootivaks masinaks

Käivitan virtuaalmasina ning sealt andministraatorina käsurea ning sisestan järgmised read.

  • cd /
  • cd Windows\system32\sysprep
  • sysprep /oobe /generalize /shutdown


Peale käskude täitmise lõppemist lülitab virtuaalmasin ennast välja, ning on valmis riistvara draivereid installima.

Bootimise menüüsse kirje lisamine

Põhimasinas tuleb andministraatorina käivitada käsurida ning sinna sisestada.

  • bcdedit /copy {current} /d “Uus boot”
  • bcdedit /set {guid} device vhd=[D:]\Boot.vhd
  • bcdedit /set {guid} osdevice vhd=[D:]\Boot.vhd
  • bcdedit /set detecthal on

Esimene käsk kopeerib hetke installatsiooni boodi kirje uude kirjesse nimege “Uus boot” ning tagastab unikaalse identifikaatori GUID, mida tuleb järgnevates käskudes kasutada õige VHD fail seadmiseks. Minu puhul siis D:\Boot.vhd fail.

Peale käskude sisestamist on uus masin põhimõtteliselt ülesseatud. Arvutile restarti tehes leiame bootimise menüüst valiku “Uus boot” ning peale riistvara ülesseadmist on meil olemas Windowsi operatsioonisüsteem, kus on kõik vajalikud programmid juba installitud.

WPF DataGrid 2 – Lahtri teksti kopeerimine

Täna puutusin kokku DataGrid kontrolliga ja pidin uurima kuidas saaks kopeerida lahtrite väärtusi Ctrl-C klahvikombinatsiooni abil.Tuli välja, et selleks peab elemendil seadma kolm atribuuti.

  • SelectionUnit=”Cell” – ühe lahtri kaupa valmine.
  • SelectionMode=”Extended” – Võmaldab valida mitut lahtrit
  • ClipboardCopyMode=”ExcludeHeader” – ei lisa tekstile veeru nime
...
<DataGrid Name="dG" SelectionUnit="Cell" SelectionMode="Extended" ClipboardCopyMode="ExcludeHeader">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
        <DataGridHyperlinkColumn Header="Link" Binding="{Binding FullName}">
            <DataGridHyperlinkColumn.ElementStyle>
                <Style TargetType="TextBlock">
                    <EventSetter Event="Hyperlink.RequestNavigate" Handler="Request" />
                </Style>
            </DataGridHyperlinkColumn.ElementStyle>
       </DataGridHyperlinkColumn>
   </DataGrid.Columns>
</DataGrid>
...

Tulemus on näha alltoodud piltidel.

DataGrid - Kopeerimine


Datagrid - Copy-Paste Excelisse


Ja nii saabki DataGridist teksti mujale kopeerida.

WPF DataGrid 1 – Lingi kuvamine ja avamine

WPF DataGridis lingi kuvamine ei ole nii lihtne kui see võiks olla. Minu suureks imestuseks ei avane DataGridHyperlinkColumn‘l klikkides midagi.
Minu leitud lahendus sellele probleemile on toodud allpool.

Näide 1

<DataGrid Name="dG">
    <DataGrid.Columns>
        <DataGridHyperlinkColumn Header="Link" Binding="{Binding Link}">
            <DataGridHyperlinkColumn.ElementStyle>
                <Style TargetType="TextBlock">
                    <EventSetter Event="Hyperlink.RequestNavigate" Handler="Request"/>
                </Style>
             </DataGridHyperlinkColumn.ElementStyle>
        </DataGridHyperlinkColumn>
         ....
   <DataGrid.Columns>
</DataGrid>

Nagu näha tuleb DataGridHyperlinkColumn veerule lisada Style elemendi EventSetter’i abil Hyperlink.RequestNavigate sündmus(Näide1 rida 06) ning selle kuular(Näide1 rida 07), et saaksime koodis käivitada protsessi(Näide 2, rida4), mis avaks lingi.

Näide 2

    ...
    private void Request(object sender, RequestNavigateEventArgs e)
    {
       Process.Start(new ProcessStartInfo(e.Uri.OriginalString));
    }
    ...

Process.Start() meetod selgitab ise välja millega antud linki avada. Veebiaadressi korral avatakse vaikebrauser, .xls faili puhul Excel.

Hyper-V error ja lahendus

Proovisin täna oma kodusel arvutil(Windows Server 2008 R2) Hyper-V tööle saada, ja kõik läks hästi. Kuid peale uue virtuaalmasina loomist selgus, et see ei taha kohe mitte töötada.

Hyper-V error

Peale Hyper-V uuesti installimise ja restartimise ning pooletunnise otsimise erinevate Google tulemuste seast leidsin lõpuks lahenduse. Piisab ainult oma tulemüüris lubada sissetulev TCP port 2179

SQL Server 2008 Express SP1 ja Windows 7

Windows 7 on igati tore OS, aga kahjuks ei õnnestu seal väga lihtsalt SQL Server 2008 installimine.

Et saada oma arvutis tööle SQL Server 2008 Express ja SQL Management Studio 2008 Express, tuleks toimida järgnevalt.

  1. Lae alla SQL Server Managment Studio 2008 Express aadressilt: link
  2. Installi see SQL Server Managment Studio 2008 Express.
  3. Tee Windowsile restart.
  4. Lae alla SQL Server 2008 Express SP1 aadressilt: link
  5. Installi see, kui mingi hetk installatsioon kokku jookseb tee arvutile restart ja proovi uuesti. See on mingisugune bugi

Kui SQL Server 2008 Express SP1 install lõppeb siis peaksid mõlemad rakendused tööle hakkama. Probleem ongi selles, et kui sul on SQL Server 2008 SP1 Express installitud enne SQL Server Managment Studio 2008 Express installimist siis viimane enam ei installi.

Lahendus on järgi proovitud Windows 7 x64, Windows 7 x86 ja Windows Server 2008 R2 peal.

ASP.NET MVC 2 RC2 ja Castle Windsor 2.1.1 IoC

Kasutades VS2010RC versiooni näeb asi välja järgmine.

Keskkond:

Visual studio 2010 RC .NET 4.0 RC projekt
Castle Windsor 2.1.1
Asp.Net MVC2 RC
Klasside teek DataModels, mis sisaldab kaustas Abstract liidest ITestRepository ja kaustas Concrete klassi TestRepository, mis selle liidese omadusi kasutab.

Sammud:

1. Loo WindsorControllerFactory klass

public class WindsorControllerFactory:DefaultControllerFactory
{
    private WindsorContainer container;

    public WindsorControllerFactory()
    {
        container=new WindsorContainer(new XmlInterpreter(new ConfigResource("castle")));

        var controllerTypes = from types in Assembly.GetExecutingAssembly().GetTypes()
                              where typeof (IController).IsAssignableFrom(types)
                              select types;

        foreach (var c in controllerTypes)
        {
             container.AddComponentLifeStyle(c.FullName,c, LifestyleType.Transient);
        }
    }

    protected override IController GetControllerInstance(
        System.Web.Routing.RequestContext requestContext,
        System.Type controllerType)
    {
        return (IController)container.Resolve(controllerType);
    }
}

2. Muuda web.config faili.
Lisa configuration tagi alla configSections tag ja castle tag. Ning system.web tagi alla httpModules

<configuration>
  <configSections>
    <section name="castle"
             type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor" />
  </configSections>
  <castle>
    <components>
      <component id="ProdsRepository"
                 <!--Registreerib liidese-->
                 service ="DataModels.Abstract.ITestRepository,DataModels"
                 <!--Annab vaste-->
                 type="DataModels.Concrete.TestRepository,DataModels"
                 lifestyle="PerWebRequest">
      </component>
    </components>
  </castle>
  ...
    <httpModules>
      <add name="PerRequestLifestyle"
           type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.MicroKernel" />
    </httpModules>
  </system.web>
  ...

3. Sea WindsorControllerFactory põhi Controller’ite loojaks.

ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory());

Tulemus:

Tulemuseks on see, et kui me kusagil loome MVC2 Controlleri näiteks:

public class TestController : Controller
{
    private ITestRepository tests;

    public TestController(ITestRepository tests)
    {
        this.tests= tests;
    }
    //TODO: write methods
}

Ei pea me enam kusagile sisse kirjutama new TestController(new TestRepository()) vaid Castle Windsor teeb seda meie eest. Nüüd saame etteantavat repository muuta, web.config faili kaudu ja mitte kogu rakendust uuesti kompileerides.

SQLplus käsud

Täis pika kuupäeva näitamiseks:

Võimaldab seada ise sessiooni põhiselt kuupäeva vormingu.

    alter session set NLS_DATE_FORMAT = 'mm-dd-yyyy HH24:mi:ss';

Outputi ridade arvu määramine:

Võimaldab seada mitu rida prinditakse ilma, et uuesti kuvataks tabeli headereid

    set pagesize 50000

Outputi tulba suuruse määramine

    column c format a20

Kus 20 on tulba “c” laius

Outputi rea laius

    set linesize 200

Kus 200 or rea sümbolite arv.

Design a site like this with WordPress.com
Alustamine