Avatar billede Greenland Nybegynder
19. maj 2009 - 18:08 Der er 6 kommentarer og
1 løsning

MSSQL skrive data til text fil indeholdende enter og ctrl+z

Hej,

Jeg skal til at skrive nogle data fra min database til en fil ved hjælp af EXEC
Filen skal indeholde en kommando som skrives til en comport hvorpå der sidder et gsm-modul til at sende en sms.

I hyperterminal kan jeg skrive:
AT+CMGF=1  <og så trykker jeg enter>
AT+CMGS="004524587896" <og så trykker jeg enter>
derefter venter hyperterminal på min tekst og når den er skrevet skal jeg trykke ctrl+z
... og så sendes sms´en til mobilen

Hvordan kan jeg skrive samme tekst fra mssql til en fil ?
Jeg har fået den til at skrive nogle data, men mit problem er at jeg skal have enter og ctrl+z med i filen.


Er det noget med at bruge char eller ascii funktionerne?

Har nogen et eksempel eller en ide til dette ?

Min streng som jeg skriver til filen skal gerne komme til at se nogenlunde således ud:

DECLARE @t varchar(100);
DECLARE @phoneTo varchar(20);
DECLARE @phoneText varchar(20);
DECLARE @enter varchar(10);
DECLARE @ctrlz varchar(10);
SET @phoneTo = 'mit tlf nummer';
SET @phoneText = 'en eller anden tekst';
SET @enter = '13';
SET @ctrlz = "ctrl+z";


set @t = 'AT+CMSS=1'+ @enter + @phoneTo+ @enter+@phoneText+@ctrlz;

Jeg bruger så @t som parameter til en stored procedure til at skrive til en fil, og det virker fint nok.

Håber nogen kan hjælpe ?

mvh

Greenland
Avatar billede trer Nybegynder
19. maj 2009 - 21:32 #1
Hej

Du skriver ikke om det er SQL 2000, 2005 eller 2008. men - I alle versioner kan du lave det ved xp_cmdshell a la

exec xp_cmdshell 'echo '+@phoneTo+' >>t.txt'
exec xp_cmdshell 'echo '+@phoneText+' >>t.txt'

(Husk dog at enable xp_cmdshell via sp_configure i SQL 2005 og 2008).

Og i 2005 og 2008 kan du lave en simpel CLR til at skrive filen til dig; sample kode er

    Public Shared Function file_write( _
        ByVal textdata As SqlString, _
        ByVal filename As SqlString) As SqlInt32
        'Optional ByVal errmsg As String = "")
        Dim wtr As StreamWriter
        Dim res As Boolean
        Try
            wtr = New StreamWriter(filename)
            wtr.Write(CStr("" + textdata))
            wtr.Close()
            res = True
        Catch ex As Exception
            res = False
        End Try
        Return res
    End Function

Som du så stopper ind i en clr (husk at sætte databasen trustworthy og - sandsynligvis - load assembliet som unsafe). Kan anbefale at du skriver din clr i Visual Studio 2008 express der er gratis.
Avatar billede trer Nybegynder
20. maj 2009 - 07:29 #2
Hm - ovenstående var egentlig et svar....
Avatar billede Greenland Nybegynder
20. maj 2009 - 10:01 #3
Tak for input, skal til at prøve din løsning af en af dagene.
Men mit problem pt. er hvordan jeg skriver enter og ctrl+Z controltegn ind i filen.

Jeg har fået oprettet filen og det hele, men enter og ctrl+z skal også skrives til filen, og det har jeg ikke fået den til !
Avatar billede Greenland Nybegynder
20. maj 2009 - 12:52 #4
og forresten jeg kører i SQL 2005
Avatar billede trer Nybegynder
20. maj 2009 - 18:46 #5
Enter skriver du ved at bruge flere ECHO statements ...  Ctrl-Z bør du kunne skrive vha xp_cmdshell 'echo '+CHAR(26)+' >>t.txt'
Avatar billede Greenland Nybegynder
26. maj 2009 - 13:03 #6
Hej igen,

tak for input, jeg får nu skrevet de rigtige tegn til filen, men løsningen virker stadig ikke. Ved ikke om jeg bare skal lukke dette spørgsmål og stille resten af mine spørgsmål i andre kategorier. Kort fortalt så kan jeg inde i hyperterminal fyre følgende kommandoer af:

at+cmgf=1 <trykker enter>
at+cmgs=mittelefonnr <trykker enter>
mintekst <trykker ctrl+z>

men når jeg skriver samme tekst i en fil som jeg kopierer til com1 så sker der ingenting.  Laver hyperterminal mon mere end jeg umiddelbart kan se ?

mvh
Greenland
Avatar billede Greenland Nybegynder
11. oktober 2009 - 23:05 #7
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester