1 Son düzenleyen, mrduyar (06.11.2007 09:30:50)

Konu: Sql server da userlog

Selamlar;

DBF de edit stored procedure yazarak bu içi çözüyorduk.

Visual Fox Pro
Procedure userekle

    Local lalias,lrecno
    lalias=Alias()
    lrecno=Recno()
    If Used("userlog")
        Select userlog
    Else
        Use userlog In 0
    Endif
    Insert Into userlog (terminal,tarihsaat,hareket,tableismi,kayitno) Values;
        (Alltrim(Sys(0)),Datetime(),'E',lalias,lrecno)
    Return .T.

SQL deki verilerim için userlog tutturmak istiyorum. ne yapmalıyım?

Bilmediğin Neyse Yanıldığındır.

2

Re: Sql server da userlog

sql'de de stored procedure var.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

3 Son düzenleyen, mrduyar (06.11.2007 13:37:37)

Re: Sql server da userlog

metin yazdı:

sql'de de stored procedure var.


selamlar;
Var olduğunu biliyorum. nasıl bir kod yazman gerektiğini bilmiyorum.
new stored procedure tıkaldığımda aşağıdaki çıkıyor.

SQL
-- ================================================

-- Template generated from Template Explorer using:
-- Create Procedure (New Menu).SQL
--
-- Use the Specify Values for Template Parameters
-- command (Ctrl-Shift-M) to fill in the parameter
-- values below.
--
-- This block of comments will not be included in
-- the definition of the procedure.
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:        <Author,,Name>
-- Create date: <Create Date,,>
-- Description:    <Description,,>
-- =============================================
CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName>
    -- Add the parameters for the stored procedure here
    <@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>,
    <@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;
 
    -- Insert statements for procedure here
    SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
END
GO

dbf deki kodu nasıl buraya yazabilirim?
yazdıktan sonra nasıl çalıştırmam gerekiyor?
bunu sql 2005 de yapıyorum. 2000 e nasıl alırım?
saygılar.

Bilmediğin Neyse Yanıldığındır.

4

Re: Sql server da userlog

ben sql server da hiç trigger yazmadım. sql books online help bence işine yarar. orda herşey var...

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

5

Re: Sql server da userlog

Umarim bu isine yarar. Yanlis hatirlamiyorsam bunu yillar once Metin sormustu:)

Visual Fox Pro
Local lnHandle, lcDatabaseName

lcDatabaseName = "myTestData"
lnHandle=SQLStringConnect('DRIVER=SQL Server;SERVER=cetin\cetin;Trusted_connection=Yes')
If SQLExec(lnHandle, "create database "+lcDatabaseName) < 0
  Do errHand
  Return
Endif
mySQLExec(lnHandle, "use "+lcDatabaseName)
mySQLExec(lnHandle, ;
  "create table anadosya"+;
  " (malid int not null, grupid int not null, grupad varchar(10),"+;
  "  inserttime datetime default getdate(),insertedby nvarchar(256) default suser_sname(),"+;
  "  updatetime datetime null, updatedby nvarchar(256) null,"+;
  "  deletetime datetime null, deletedby nvarchar(256) null)")
mySQLExec(lnHandle, ;
  "create table grupdosya"+;
  " (grupId int not null IDENTITY PRIMARY KEY,"+;
  "   grupad varchar(30))")
mySQLExec(lnHandle, ;
  "CREATE TABLE MalDosya"+;
  "   (malid int NOT NULL IDENTITY PRIMARY KEY,"+;
  "   Mal_Ad varchar(30),"+;
  "   GrupID int NOT NULL References GrupDosya(GrupId))")
 
mySQLExec(lnHandle, ;
  "CREATE trigger MalDosya_Insert On MalDosya For Insert as"+;
  "  insert into AnaDosya "+;
  " select mal.identitycol as MalId, mal.grupId as GrupId, grup.GrupAd as GrupAd,"+;
  " getdate(),SUSER_SNAME(),null,null,null,null"+;
  "   from maldosya mal "+;
  "   inner join grupdosya grup"+;
  "   on mal.grupid = grup.grupid"+;
  "   where mal.identitycol = IDENT_CURRENT('MalDosya')")
 
mySQLExec(lnHandle, ;
  "CREATE trigger MalDosya_Update On MalDosya For Update as"+;
  "    update AnaDosya "+;
  "      set UpdateTime = getdate(), UpdatedBy = SUSER_SNAME()"+;
  "      where exists (select * from inserted where Anadosya.MalId = inserted.MalId)")
 
mySQLExec(lnHandle, ;
  "CREATE trigger MalDosya_Delete On MalDosya For Delete as"+;
  "  update AnaDosya "+;
  "      set DeleteTime = getdate(), DeletedBy = SUSER_SNAME()"+;
  "      where exists (select * from deleted where Anadosya.MalId = deleted.MalId)")
 
 
* Tablo ve trigger hazir
* Grup tanimla
For jx=1 to 5
  m.lcGrupAd = 'Grup'+trans(jx)
  mySQLExec(lnHandle, "insert into GrupDosya (grupad) values (?lcGrupAd)") && Grup
Endfor
 
* Mal insert
mySQLExec(lnHandle, "select * from GrupDosya","crsGrup")
Select crsGrup
Scan
  m.luGrupID = crsGrup.GrupId
  For ix=1 to 3
    m.lcMalAd  = trim(crsGrup.GrupAd)+'_Mal'+trans(ix)
    mySQLExec(lnHandle, "insert into MalDosya (Mal_Ad, GrupId) values (?lcMalAd, ?luGrupId)")
  Endfor
Endscan
 
* Insert sonrasi ne insert edildigine bak
CheckTables(lnHandle,'Insert sonrasi')
 
mySQLExec(lnHandle, "update MalDosya set GrupId = 3 where GrupId = 2")
 
* Guncelleme sonrasi
CheckTables(lnHandle,'Guncelleme sonrasi')
 
mySQLExec(lnHandle, "delete from MalDosya where GrupId = 3")
 
* Delete sonrasi
CheckTables(lnHandle,'Delete sonrasi')
 
SQLDisconnect(lnHandle)
 
Function mySQLExec
Lparameters tnHandle, tcSQL, tcCursorName
tcCursorName = iif(empty(tcCursorName),'',tcCursorName)
If SQLExec(tnHandle,tcSQL,tcCursorName) < 0
  Do errHand with tcSQL
Endif
 
Function errHand
Lparameters tcSQL
lcError=tcSQL+chr(13)
Aerror(arrCheck)
For ix=1 to 7
  lcError = lcError+trans( arrCheck [ix])+ chr(13)
Endfor
Messagebox(lcError,0,'Error def.')
 
 
Function CheckTables
Lparameters tnHandle,tcTitle
mySQLExec(tnHandle, ;
  "select * from GrupDosya; select * from MalDosya ; select * from AnaDosya","crsResult")
 
Select crsResult
Browse title 'Gruplar - '+tcTitle
Select crsResult1
Browse title 'Mallar - '+tcTitle
Select crsResult2
Browse title 'Ana - '+tcTitle

6

Re: Sql server da userlog

Ramazan,
SQL2005'teki templatei doldur once (Ctrl+Shift+M ile sana liste geliyor, parametre adi,tipi filan. Deger gir). Copy paste ile 2000'e alabilirsin (Query Analyzer). Ancak 2005 komutlarinin hepsi 2000'de tutmaz unutma.

7

Re: Sql server da userlog

cetinbasoz yazdı:

Umarim bu isine yarar. Yanlis hatirlamiyorsam bunu yillar once Metin sormustu:)
..


hehe... hiç trigger kullanmadım ama. belki mysql ile ilgili birşey sormuşumdur. hiç hatırlamıyorum...

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

8

Re: Sql server da userlog

cetinbasoz yazdı:

...Ancak 2005 komutlarinin hepsi 2000'de tutmaz unutma.


sql 2005 i kurdum. beğenmedim. tekrar 2000 kurdum. alışkanlık heralde. 2000'deki books online daha güzel geliyor bana. zaten diğer aygıtlarını da kullanmıyorum. sadece vfp içinden kod yazıyorum.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

9

Re: Sql server da userlog

Hocam Allah tan metin sormuş! Sormasaydı ne yapacaktık. çok teşekkürler.

Bilmediğin Neyse Yanıldığındır.

10

Re: Sql server da userlog

Metin,
SQL2005'i ilk gorupte oynadigimda dogrusu aynen ben de begenmedim, aliskanliktan Query Analyzer ve benzeri seyler arandim. Simdi ise isler tersine dondu meger cok daha rahat ve efektifmis. SQL2000'e gectigim zamanlar zul geliyor:)

11

Re: Sql server da userlog

Aslinda uygulama yazmayi biraksam, SQL server function, procedure, datatipi gibi seyleri yazip database'e ozel satsam (ya da ruhumu birilerine kiralasam) diyorum:) Harika ozellik SQL2005'te C# ile onlar yaziliyor. T-SQL'i iyi bilmek ya da kullananin C# bilmesi gerekmiyor. Mesela C# ile KareKokAl() diye birsey yazdim diyelim. Topu topu 2-3 satir SQL koduyla bu fonksiyon bir database'e tanimlanabiliyor ve artik o database oyle bir fonsiyonu kullaniyor:

select sayi, dbo.KareKokAl(sayi) as karesi from myTable

gibi. Bu tabii SQL ile de yaratilabilen bir fonksiyon ama T-SQL icin bu kadar basit olmayan hesaplamalar, VFP'deki cursor benzeri islemler filan harika ya (ilkini gecenlerde yaptim da ondan heyecan yapti:)

12

Re: Sql server da userlog

valla beni bu saatten sonra program yazmak heyecanlandırmıyor. bir arkadaş atos diye bir firmaya girdi. o şirkete girdiğinden beri program filan yazdığı yok. beyninin %10 kapasitesini kullanarak dizayn yapıyor ve benden çok para alıyor. bence bu çok daha heyecan verici... smile

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

13

Re: Sql server da userlog

Cetin abi trigger ile ilgili kodu daha dün çöze bilgim ve gerçekten çok güzel ellerine sağlık.
Sadece ek 1 şey daha isteyeceğim senden.  Sadece delete tirigger yapacağımısı düşünürsen. silinen kaydın guid bilgisini ve table adını silen kişi ve taris saat bilgisini tutman içi nasıl bir kod yazabilirim.
Şimdiden teşekkürler.
Not:Gönderdiğin kodun çalışmadı için "I" lari "i" yapmak gerekiyor. smile)

Bilmediğin Neyse Yanıldığındır.

14

Re: Sql server da userlog

mrduyar yazdı:

...
Not:Gönderdiğin kodun çalışmadı için "I" lari "i" yapmak gerekiyor. smile)


sql server'da türkçe kullanınca yapıyor. eğer tabloyu "I" ile oluşturduysan hep "I", "i" ile oluşturduysan hep "i" kullanman gerekiyor.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

15

Re: Sql server da userlog

Yukaridaki kodda var, oradan aldim:

Visual Fox Pro
mySQLExec(lnHandle, ;

  "CREATE trigger MalDosya_Delete On MalDosya For Delete as"+;
  "  update AnaDosya "+;
  "      set DeleteTime = getdate(), DeletedBy = SUSER_SNAME()"+;
  "      where exists (select * from deleted where Anadosya.MalId = deleted.MalId)")


"Sadece delete tirigger yapacağımısı düşünürsen. silinen kaydın guid bilgisini ve table adını silen kişi ve taris saat bilgisini"

SQL
CREATE TRIGGER MyTable_Delete ON MyTable FOR DELETE AS

  INSERT logTable (guidID, [tableName], silen, silmeZamani)
  SELECT myTableID, 'myTable', Suser_sName(),getdate() FROM deleted

16

Re: Sql server da userlog

selamlar;
Hocam çok teş. Sonuçta SQL de user log da temel olarak yapılmış oldu.

Visual Fox Pro
** sql tablo isimleri alınır?

SQLExec(baglan(),"sp_tables","Tablolar")
Select table_name As tableadi From Tablolar Where table_type='TABLE' Order By 1 Into Cursor Tablolar1
 
Local Lcsql
Lcsql=''
TEXT TO Lcsql NOSHOW PRETEXT 7 TEXTMERGE
create table anadosya
       (tableadi char(50),guid1 uniqueidentifier,inserttime datetime ,insertedby nvarchar(256),
        updatetime datetime null, updatedby nvarchar(256) null,
        deletetime datetime null, deletedby nvarchar(256) null,detaylar text)
ENDTEXT
? "Ana dosya"+Str(SQLExec(baglan(),m.Lcsql))
 
Select Tablolar1
Go Top
Scan
 
*-- kayır açarak delete
    Lcekled="Create Trigger "+Alltrim(Tablolar1.tableadi)+"_Delete On "+Alltrim(Tablolar1.tableadi)+;
        " For Delete As Insert AnaDosya (tableadi,guid1, deletedby,deletetime) Select '"+Alltrim(Tablolar1.tableadi)+"'"+;
        " ,guid, Suser_sName(),getdate() From Deleted "
    ? Alltrim(Tablolar1.tableadi)+" Delete "+ Str(SQLExec(baglan(),m.Lcekled))   
*-- kayır açarak insert
    Lceklei="Create Trigger "+Alltrim(Tablolar1.tableadi)+"_Insert On "+Alltrim(Tablolar1.tableadi)+;
        " For Insert As Insert AnaDosya (tableadi,guid1, insertedby,inserttime) Select '"+Alltrim(Tablolar1.tableadi)+"'"+;
        " ,guid, Suser_sName(),getdate() From inserted "
    ? Alltrim(Tablolar1.tableadi)+" Delete "+ Str(SQLExec(baglan(),m.Lceklei))   
*-- kayır açarak update
    Lcekleu="Create Trigger "+Alltrim(Tablolar1.tableadi)+"_Update  On "+Alltrim(Tablolar1.tableadi)+;
        " For Update As Insert AnaDosya (tableadi,guid1, updatedby,updatetime) Select '"+Alltrim(Tablolar1.tableadi)+"'"+;
        " ,guid, Suser_sName(),getdate() From inserted "
    ? Alltrim(Tablolar1.tableadi)+" Delete "+ Str(SQLExec(baglan(),m.Lcekleu))   
Endscan
*!*    ** trigger silmek içi
*!*    Select Tablolar1
*!*    Go Top
*!*    SCAN
*!*    Lcekle1="DROP TRIGGER [dbo].["+Alltrim(Tablolar1.tableadi)+"_Delete]"
*!*    Lcekle2="DROP TRIGGER [dbo].["+Alltrim(Tablolar1.tableadi)+"_Update]"
*!*    Lcekle3="DROP TRIGGER [dbo].["+Alltrim(Tablolar1.tableadi)+"_Insert]"
*!*    ? Alltrim(Tablolar1.tableadi)+" d.Delete "+ Str(SQLExec(baglan(),m.Lcekle1))
*!*    ? Alltrim(Tablolar1.tableadi)+" d.update "+ Str(SQLExec(baglan(),m.Lcekle2))
*!*    ? Alltrim(Tablolar1.tableadi)+" d.insert "+ Str(SQLExec(baglan(),m.Lcekle3))
*!*    ENDSCAN
Bilmediğin Neyse Yanıldığındır.