Zliczenie ilości lini w pliku pod Windowsem

find /v /c „&*fake&*” *.php >>count.txt

Otwieramy plik w arkuszu kalkulacyjnym i zliczmy linie.

Oczywiście wyniki są mniej więcej dokładne ale dają pogląd na to ile jest lini.

Acrobar Reader – problem na Windowsie 2008 R2 dla osób łączących się przez TS

Przy próbie uruchomienia pojawiał się błąd:
an internal error occurred
i program kończył działanie. Oczywiście było to dość irytujące.

Przyczyną był Protected Pode Acrobata. Najszybciej dla wszystkich użytkowników jest wyłączenie go poprzez rejestr. Oczywiście każda wersja Acrobata ma w innym miejscu wis. W wypadku wersji XI:
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Policies\Adobe\Acrobat Reader\10.0\FeatureLockdown]
„bPRotectedMode”=dword:00000000

Jeżeli nie ma wpisu „bPRotectedMode” to należy go tam dodać.

Nagle wszystko działa :)

Zmiany wprowadzasz na własną odpowiedzialność – u mnie zadziałało 😉

WTF, ASAP, itp ;-)

Przydatne w korporacyjnej korespondencji:
http://www.abbreviations.com

:-)

Task na Windows 2008 R2 wskazuje na błąd 0x1 lub 0xFF

Mamy pliczek bat (nazwijmy go start.bat) który wykonuje pewne operacje. Okazuje się, ze po uruchomieniu w Task Schedulerze mamy informacje o błędzie. Sam skrypt uruchomiony z ręki działa prawidłowo.

Dorzucamy mała modyfikację do pliczku – tworzymy kolejnego bata:

@echo off
echo %date% %time% %UserName% %ComputerName% >> c:\log.txt
ping -n 3 localhost > null
start.bat  1>>c:\log.txt
dir
ping -n 10 localhost > null
2>>&1
echo %date% %time% End of task >> c:\log.txt



Okazuje się, że TS uruchamia w innym miejscu start.bat W takim razie kolejna modyfikacja:

@echo off
echo %date% %time% %UserName% %ComputerName% >> c:\log.txt
ping -n 3 localhost &gt; null</pre>
cd "C:\katalog\program\"</pre>
start.bat  1&gt;&gt;c:\log.txt
dir
ping -n 10 localhost &gt; null
2&gt;&gt;&amp;1
echo %date% %time% End of task &gt;&gt; c:\log.txt


Czyli nawigujemy do katalogu z naszym batem. Działa 😀

Instalacja MSSQL 2008 R2 – 0xDC80C325

W logu informacja:
Access is denied
Configuration error code: 0xDC80C325

Co zrobić? Zgodnie z linkiem:
http://adminsgoodies.com/access-is-denied-error-installing-sql-server-2008-on-windows-7/
Następnie: Start -> Uruchom -> wpisać: gpedit.msc -> Enter (lub nacisnąć OK)
Po drzewku nawigować się do:
Computer Configuration -> Windows Settings -> Security Settings -> Local Policies -> User Rights Assignment -> Debug programs
Następnie dodać swoje konto.

Osobiście polecam restart… i odinstalowanie uszkodzonej instalacji SQL.

Hasło na pliku czyli zróbmy zipa.

Używam do tego darmowego 7 zipa. Prosty i szybki kawałek kodu do spakowania pliku z nadaniem hasła „haslo”.


set @CompresFile =d:\7z.exe a d:\maile\nazwaPliku.zip -phaslo d:\maile\plikDoSpakowania.html

EXEC master..xp_cmdshell @CompresFile;

Oczywiście nie daję gwarancji… ale jak na razie działa 😉

Attache Database…

Zaprzyjaźniona firma miała mały drobny problem. Laptop z bazą jednego z handlowców padł. Windows XP wysypał się i nie wstawał – zero reakcji, od razu błędy, etc. Serwisant stwierdził uszkodzenie dysku i zalecił złomowanie. Ostatnia kopia bazy danych oczywiście wykonana przy mojej ostatniej wizycie (czyli około dziesięciu miesięcy temu). Co mi tam – biorę się za to. Poprosiłem o dysk… i bez problemu odczytałem dane. Pliki skopiowane. Mam mdfa i ldfa z bazy – pełnia szczęścia. Robimy attache bazy danych… i zonk.

Klik w Error message:

 

TITLE: Microsoft SQL Server Management Studio
------------------------------

Attach database failed for Server ‚xxxxxxx\sql2008r2’. (Microsoft.SqlServer.Smo)

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.50.1617.0+((KJ_RTM_GDR).110422-1901+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Attach+database+Server&LinkId=20476

——————————
ADDITIONAL INFORMATION:

Cannot attach a database with the same name as an existing database. (Microsoft.SqlServer.Smo)

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.50.1617.0+((KJ_RTM_GDR).110422-1901+)&LinkId=20476

——————————
BUTTONS:

OK
——————————

 

No tak… uprawnienia… ale chwila, na Windows 7 mam  do tego katalogu fulla. Coś mi świata… Mam dwie możliwości: szukać rozwiązania co z tymi uprawnieniami jest nie tak lub skopiować na szybko pliki do katalogu z SQL (np.  „C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\”) i sprawdzić czy działa.

Done – pięknie :-)

Kocham to 😀

 

W sumie jestem ciekawy czy naprawdę ten dysk jest uwalony czy gość w serwisie po prostu podał złą diagnozę lub na koniec znajomy źle zrozumiał serwisanta… cóż ja swoją pracę wykonałem 😉

Stworzenie i zapisanie pliku za pomocą MSSQL

Czasem potrzebne jest coś by zapisać informacje z zapytania do pliku. Może to być log lub po prostu dane do dalszej obróbki. Przykładowa procedura. Niestety nie pamiętam gdzie ją znalazłem – czekała od jakiegoś czasu u mnie na dysku. Wiedziałem po prostu, że się kiedyś przyda.:

CREATE PROCEDURE [dbo].[spWriteStringToFile]
 (
@String text,--Varchar(max), --8000 in SQL Server 2000
@Path VARCHAR(255),
@Filename VARCHAR(100)

--
)
AS
DECLARE  @objFileSystem int
        ,@objTextStream int,
                @objErrorObject int,
                @strErrorMessage Varchar(1000),
            @Command varchar(1000),
            @hr int,
                @fileAndPath varchar(80)

set nocount on

select @strErrorMessage='opening the File System Object'
EXECUTE @hr = sp_OACreate  'Scripting.FileSystemObject' , @objFileSystem OUT

Select @FileAndPath=@path+'\'+@filename
if @HR=0 Select @objErrorObject=@objFileSystem , @strErrorMessage='Creating file "'+@FileAndPath+'"'
if @HR=0 execute @hr = sp_OAMethod   @objFileSystem   , 'CreateTextFile'
        , @objTextStream OUT, @FileAndPath,2,True

if @HR=0 Select @objErrorObject=@objTextStream, 
        @strErrorMessage='writing to the file "'+@FileAndPath+'"'
if @HR=0 execute @hr = sp_OAMethod  @objTextStream, 'Write', Null, @String

if @HR=0 Select @objErrorObject=@objTextStream, @strErrorMessage='closing the file "'+@FileAndPath+'"'
if @HR=0 execute @hr = sp_OAMethod  @objTextStream, 'Close'

if @hr<>0
        begin
        Declare 
                @Source varchar(255),
                @Description Varchar(255),
                @Helpfile Varchar(255),
                @HelpID int
        
        EXECUTE sp_OAGetErrorInfo  @objErrorObject, 
                @source output,@Description output,@Helpfile output,@HelpID output
        Select @strErrorMessage='Error whilst '
                        +coalesce(@strErrorMessage,'doing something')
                        +', '+coalesce(@Description,'')
        raiserror (@strErrorMessage,16,1)
        end
EXECUTE  sp_OADestroy @objTextStream
EXECUTE sp_OADestroy @objTextStream

GO

Wywołanie procedury:

EXEC    @return_value = [dbo].[spWriteStringToFile] -- chyba, że inaczej ją nazwiesz
                                        @String = @BodyFile, -- to co chcesz w pliku, np. 'to jest tekst do wklejenie'. Jeżeli będzie więcej niż 8000 znaków podziel na kilka części
                                        @Path = @FilePath, -- ścieżka gdzie ma być zapisany plik, np. 'c:\temp\sql\'
                                        @Filename =@FileName -- nazwa pliku w jakim mają być zapisane dane, np. 'pliknazwany.txt'

Jest to dość proste i wygodne zapytanie. Może wystąpić konieczność zmiany uprawnień do wykonywania procedur i zapisu na dysku. Jednak bez większych problemów można sobie z tym poradzić.

Oczywiście całość można wywołać w trochę bardziej skomplikowany sposób:

DECLARE @BodyFile1 varchar(max), @BodyFile2 varchar(max), @BodyFile varchar(max), @FilePath varchar (250), @FileName varchar (250)
--proszę uważać by ścieżka do pliku oraz nazwa pliku nie przekroczyły ograniczeń systemowych - w Windowsie jest to (bez zmian) 256 znaków
set @FilePath = 'c:\tamp\sql\';
set @FileName = 'plikzzapytaniemsql.txt' -- może być to html, xml, itp.
set @BodyFile1 ='Jakiś długi tekst, może zawierać wiele znaków';
set @BodyFile2 ='Kolejny długi tekst'; 
set @BodyFile = @BodyFile1 +''+ @BodyFile2; -- o dziwo nie udało mi się zbudować długiego tekstu wprost. Ale o tym dalej

EXEC    @return_value = [dbo].[spWriteStringToFile] 
                                        @String = @BodyFile, 
                                        @Path = @FilePath,
                                        @Filename =@FileName

Dlaczego użyłem połączenia @BodyFile = @BodyFile1 +”+ @BodyFile2 ? Niestety mimo konfiguracji @BodyFile varchar (max) skrypt miał problem z większą ilością znaków. Połączenie umożliwiało mi przekroczenie barierę 8000… w każdym razie działa.
Skrypty sprawdzałem na MSSQL 2005 oraz MSSQL 2008 R2.