21 Haziran 2010 Pazartesi

uzak masaüstünde kısayollar

Kısayol tuşlarını görev anahtarlamalı yerel bilgisayar düzeyinde çalışır ve aracılığıyla Terminal sunucusuna geçirilir.. Ancak, bazı alternatif kısayol tuşlarını RDP istemci sağlamış:
CTRL + ALT + END Windows NT güvenlik iletişim kutusunu başlatır. Benzer şekilde Windows NT/2000 CTRL + ALT + DEL.

ALT + PAGE UP programlar arasında soldan sağa doğru geçiş yapar. Windows ALT + TAB benzer.

ALT + PAGE DOWN programlar arasında sağdan sola geçiş yapar. Windows ÜST KRKT + ALT + SEKME benzer.

ALT + INSERT döngüleri çoğunda programlar arasında en son sipariş kullanılır. Windows ALT + ESC benzer.

ALT + HOME Başlat menüsünü görüntüler. Windows CTRL + ESC benzer.

CTRL + ALT + BREAK, istemci bir pencere ve tam ekran arasında geçiş yapar.

ALT + DELETE Windows menüyü görüntüler.

CTRL + ALT + EKSI (eksi gibi sayısal tuş takımında simgesi) (ALT + bir yerel bilgisayarda PrintScrn tuşlarına basıldığında sağlanan işlev elde edilir sağlar.) Terminal sunucusu panosuna istemcideki etkin pencerenin bir anlık görüntüsünü yerleştirir.

CTRL + ALT + ARTı (+ gibi + sayısal tuş takımında simgesi) istemcinin tüm pencere alanının bir anlık görüntü, (yerel bir bilgisayarda PrintScrn tuşlarına basıldığında sağlanan işlev elde edilir sağlar.) Terminal sunucusu panosuna yerleştirir

24 Nisan 2010 Cumartesi

Güncellemede KOD 737D hatası

İşletim sisteminizde Sql Express kuruluyken güncelleştirme esnasında 737D hatası ile karşılaşabilirsiniz.

Hatanızın çözümü için kayıt defterinde

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft
SQLServer\MSSQL.1\Setup

yoluna gelerek resume anahtarının değerini 0 (sıfır) yapmak yeterlidir.

15 Nisan 2010 Perşembe

oracle flashback query

son zamanlarda sıkça hata yapmaya başladım.yaşlandım herhalde bu işler için. bi delete veya bi update yapıyorum sonra commit diyorum ardından eyvah diyorum:) sonra da hemen neydi lan bişi vardı tablonun eski tarihli bir görüntüsünü alabiliyorduk diyorum.google a oracel flashback query yazıyorum sonra scn(system change number) li sonuçlar dönüyor falan. ben bilmiyorum scn falan diyorum bana zamanla ilgili bişiler ver bu sefer timestamp çıkıyor karşıma... sonuçta aşağıdaki query i yazabiliyorum.

SELECT *
FROM stn_ihale_yaklasik_maliyet
AS OF SCN TIMESTAMP_TO_SCN(SYSTIMESTAMP - 1/24)

query den de anlaşılacağı üzere arkadaş bize tablonun bir saat önceki veri kümesini veriyor.

burda dikkat edilmesi gereken üç konu var.
1- bu özelliği kullanabilmek için database'de ayarlamak yapmak gerekebilir.(default olarak açıktır karıştırmayın yani:) 10g ile birlikte gelmiştir diye biliyorum)
2- tablo yapısı değişmemiş olmalıdır.yani siz kolon ekler veya çıkarırsanız geçmiş olsun.
3- from yanına sadece tek tablo yazabiliyorsunuz. tavsiyem select in başına
create table tmp as
yazıp sonra gerekli işlemleri yapmanızdır.

birde en fazla bir hafta geriye dönebiliyorsunuz default ayarlarla.

detaylı bilgi için
http://psoug.org/reference/flash_query.html
http://www.oracle-base.com/articles/10g/Flashback10g.php

ihtiyaç hissedilmeyen günler dileyiğle...

12 Nisan 2010 Pazartesi

oracle sql de kayıtları yatay yazdırma (wm_concat)

bizden müşteri ve müşterinin satışları gibi bir bilgiyi tek satırda istediklerinde biz sql harici çözümler bulurduk hep.wm_concat ile artık gerek yok buna.

select m.musteri_no,wm_concat(ms.satis_fiyati)
from musteri m,musteri_satis ms
where m.musteri_no = ms.musteri_no
group by m.musteri_no

daha ayrıntılı bilgi ve farklı func. için
http://www.oracle-base.com/articles/misc/StringAggregationTechniques.php

fmb dosyalarını tekbir forms builder içinde açma

bu konuya takmış nadir insanlardanımdır herhalde:) illa tüm fmb tek bir forms içinde açılsın istiyorum. diğer türlü windows explorer dan çift tıklayınca ayrı bir forms açılıyor tekrar user ve pass giriyorsunuz. bunu engellemek için xp de dosya türlerine girip ayar yapabiliyorduk. fakat windows 7 de öyle bir ayar yapacak yeri bulamadım. ben de eski makinemden ilgili reg kaydını buldum. win7 de de aynen işe yaradı. aşğıdaki kısmı notepad e yapıştırın.uzantısını .reg yapın. çalıştırın.


Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\fmb_auto_file]
@=""
"EditFlags"=dword:00000000
"BrowserFlags"=dword:00000008

[HKEY_CLASSES_ROOT\fmb_auto_file\shell]
@="open"

[HKEY_CLASSES_ROOT\fmb_auto_file\shell\open]

[HKEY_CLASSES_ROOT\fmb_auto_file\shell\open\command]
@="\"C:\\orant\\BIN\\ifbld60.EXE\" \"%1\""

[HKEY_CLASSES_ROOT\fmb_auto_file\shell\open\ddeexec]
@="[open(\"%1\")]"

[HKEY_CLASSES_ROOT\fmb_auto_file\shell\open\ddeexec\Application]
@="ifbld60"

[HKEY_CLASSES_ROOT\fmb_auto_file\shell\open\ddeexec\Topic]
@="System"

4 Nisan 2010 Pazar

Oracle Forms 6i de matrix form yapımı (tefe hesaplama)

hikaye kısaca şudur:
müşterinin daha önceden aldığı fiyatları tefe değerlerine göre güncel fiyat bilgisine çevirmemiz gerekiyordu. müşteri daha önceden bu işi excell ortamında manuel olarak yapıyordu.her ay açıklanan tefe bilgilerini
"yıl-ocak-şubat-mart-nisan-mayıs-haziran-temmuz-ağustos-eylül-ekim-kasım-aralık" formatındaki bir excele giriyorlardı. daha sonra güncellemek istedikleri fiyat bilgisi için ilgili ayla son tefe bilgisini bir formule tabi tutup bir çarpan buluyorlardı. şöyle ki:
tefe_çarpanı=(son_tefe_degeri / ilk_tefe_degeri) * 100 - 100
ardından bu çarpanı kullanarak güncel fiyat bilgisine ikinci bir formülle ulaşıyorlardı.
oda şudur :
guncel_fiyat:= eski_fiyat + (eski_fiyat* tefe_çarpanı)/ 100
bu bilgiler ışığında benim olayı programatize etmem gerekiyordu. formüller v.s. kolay fakat insanları verileri alıştıkları şekilde
"yıl-ocak-şubat-mart-nisan-mayıs-haziran-temmuz-ağustos-eylül-ekim-kasım-aralık"
kolon dizilimiyle görüp değiştirmelerini istiyordum. ve de bunu formsda yapmalıydım:)
biraz araştırma birazda kasma neticesinde bulduğum yol şudur.

--tefe değerlerinin tutulacağı tablo
CREATE TABLE STN_TEFE_DEGERLERI (
YIL NUMBER(4),
AY NUMBER(4),
DEGER NUMBER(22,6)
)
/
--index güzeldir:)
CREATE UNIQUE INDEX STN_TEFE_NDX ON STN_TEFE_DEGERLERI (
YIL ASC,
AY ASC
);
--bu da kullanıcılaın ekranda görecekleri şekilde ayarlanmış view
CREATE OR REPLACE FORCE VIEW satinalma.stn_v_tefe_deger (yil,
ocak,
subat,
mart,
nisan,
mayis,
haziran,
temmuz,
agustos,
eylul,
ekim,
kasim,
aralik
)
AS
SELECT yil, (SELECT deger
FROM stn_tefe_degerleri r
WHERE r.yil = td.yil AND ay = 01) ocak,
(SELECT deger
FROM stn_tefe_degerleri r
WHERE r.yil = td.yil AND ay = 02) subat,
(SELECT deger
FROM stn_tefe_degerleri r
WHERE r.yil = td.yil AND ay = 03) mart,
(SELECT deger
FROM stn_tefe_degerleri r
WHERE r.yil = td.yil AND ay = 04) nisan,
(SELECT deger
FROM stn_tefe_degerleri r
WHERE r.yil = td.yil AND ay = 05) mayis,
(SELECT deger
FROM stn_tefe_degerleri r
WHERE r.yil = td.yil AND ay = 06) haziran,
(SELECT deger
FROM stn_tefe_degerleri r
WHERE r.yil = td.yil AND ay = 07) temmuz,
(SELECT deger
FROM stn_tefe_degerleri r
WHERE r.yil = td.yil AND ay = 08) agustos,
(SELECT deger
FROM stn_tefe_degerleri r
WHERE r.yil = td.yil AND ay = 09) eylul,
(SELECT deger
FROM stn_tefe_degerleri r
WHERE r.yil = td.yil AND ay = 10) ekim,
(SELECT deger
FROM stn_tefe_degerleri r
WHERE r.yil = td.yil AND ay = 11) kasim,
(SELECT deger
FROM stn_tefe_degerleri r
WHERE r.yil = td.yil AND ay = 12) aralik
FROM stn_tefe_degerleri td
GROUP BY yil;

ardından klasik wizardlarla view 'imi forma koydum. kullanıcı istediği şekilde görebiliyordu veriyi. bundan sonraki adımda atraksiyon başlıyor.bu form üzerinde kayıt ekleme,silme ve güncelleme... bunun için de üç ayrı procedure yazdım package ımın içine koydum.şöyleki;

PROCEDURE stn_p_tefe_insert (
p_yil NUMBER,
p_ocak NUMBER,
p_subat NUMBER,
p_mart NUMBER,
p_nisan NUMBER,
p_mayis NUMBER,
p_haziran NUMBER,
p_temmuz NUMBER,
p_agustos NUMBER,
p_eylul NUMBER,
p_ekim NUMBER,
p_kasim NUMBER,
p_aralik NUMBER
)
IS
BEGIN
IF p_ocak IS NOT NULL
THEN
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 01, p_ocak
);
END IF;

IF p_subat IS NOT NULL
THEN
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 02, p_subat
);
END IF;

IF p_mart IS NOT NULL
THEN
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 03, p_mart
);
END IF;

IF p_nisan IS NOT NULL
THEN
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 04, p_nisan
);
END IF;

IF p_mayis IS NOT NULL
THEN
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 05, p_mayis
);
END IF;

IF p_haziran IS NOT NULL
THEN
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 06, p_haziran
);
END IF;

IF p_temmuz IS NOT NULL
THEN
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 07, p_temmuz
);
END IF;

IF p_agustos IS NOT NULL
THEN
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 08, p_agustos
);
END IF;

IF p_eylul IS NOT NULL
THEN
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 09, p_eylul
);
END IF;

IF p_ekim IS NOT NULL
THEN
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 10, p_ekim
);
END IF;

IF p_kasim IS NOT NULL
THEN
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 11, p_kasim
);
END IF;

IF p_aralik IS NOT NULL
THEN
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 12, p_aralik
);
END IF;
END;

PROCEDURE stn_p_tefe_update (
p_yil NUMBER,
p_ocak NUMBER,
p_subat NUMBER,
p_mart NUMBER,
p_nisan NUMBER,
p_mayis NUMBER,
p_haziran NUMBER,
p_temmuz NUMBER,
p_agustos NUMBER,
p_eylul NUMBER,
p_ekim NUMBER,
p_kasim NUMBER,
p_aralik NUMBER
)
IS
BEGIN
IF p_ocak IS NOT NULL
THEN
begin
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 01, p_ocak
);
exception when dup_val_on_index then
UPDATE stn_tefe_degerleri
SET deger = p_ocak
WHERE yil = p_yil AND ay = 01;
end;
END IF;

IF p_subat IS NOT NULL
THEN
begin
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 02, p_subat
);
exception when dup_val_on_index then
UPDATE stn_tefe_degerleri
SET deger = p_subat
WHERE yil = p_yil AND ay = 02;
end;
END IF;

IF p_mart IS NOT NULL
THEN
begin
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 03, p_mart
);
exception when dup_val_on_index then
UPDATE stn_tefe_degerleri
SET deger = p_mart
WHERE yil = p_yil AND ay = 03;
end;
END IF;

IF p_nisan IS NOT NULL
THEN
begin
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 04, p_nisan
);
exception when dup_val_on_index then
UPDATE stn_tefe_degerleri
SET deger = p_nisan
WHERE yil = p_yil AND ay = 04;
end;
END IF;

IF p_mayis IS NOT NULL
THEN
begin
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 05, p_mayis
);
exception when dup_val_on_index then
UPDATE stn_tefe_degerleri
SET deger = p_mayis
WHERE yil = p_yil AND ay = 05;
end;
END IF;

IF p_haziran IS NOT NULL
THEN
begin
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 06, p_haziran
);
exception when dup_val_on_index then
UPDATE stn_tefe_degerleri
SET deger = p_haziran
WHERE yil = p_yil AND ay = 06;
end;
END IF;

IF p_temmuz IS NOT NULL
THEN
begin
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 07, p_temmuz
);
exception when dup_val_on_index then
UPDATE stn_tefe_degerleri
SET deger = p_temmuz
WHERE yil = p_yil AND ay = 07;
end;
END IF;

IF p_agustos IS NOT NULL
THEN
begin
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 08, p_agustos
);
exception when dup_val_on_index then
UPDATE stn_tefe_degerleri
SET deger = p_agustos
WHERE yil = p_yil AND ay = 08;
end;
END IF;

IF p_eylul IS NOT NULL
THEN
begin
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 09, p_eylul
);
exception when dup_val_on_index then
UPDATE stn_tefe_degerleri
SET deger = p_eylul
WHERE yil = p_yil AND ay = 09;
end;
END IF;

IF p_ekim IS NOT NULL
THEN
begin
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 10, p_ekim
);
exception when dup_val_on_index then
UPDATE stn_tefe_degerleri
SET deger = p_ekim
WHERE yil = p_yil AND ay = 10;
end;
END IF;

IF p_kasim IS NOT NULL
then
begin
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 11, p_kasim
);
exception when dup_val_on_index then
UPDATE stn_tefe_degerleri
SET deger = p_kasim
WHERE yil = p_yil AND ay = 11;
end;
END IF;

IF p_aralik IS NOT NULL
THEN
begin
INSERT INTO stn_tefe_degerleri
(yil, ay, deger
)
VALUES (p_yil, 12, p_aralik
);
exception when dup_val_on_index then
UPDATE stn_tefe_degerleri
SET deger = p_aralik
WHERE yil = p_yil AND ay = 12;
end;
END IF;
END;

PROCEDURE stn_p_tefe_delete (p_yil NUMBER)
IS
BEGIN
DELETE FROM stn_tefe_degerleri
WHERE yil = p_yil;
END;


burası da tamam.şimdi sıra geldi olayın en can alıcı yerine; forms.
forms da ilgili datablock üzerine geldim.özellikler pencerisini açıp DML Data target type kısmını transactianal trigger olarak değiştirdim.



ardından datablock a ON-INSERT,ON-UPDATE,ON-DELETE ve ON-LOCK triggerlarını ekledim.
yazdığım procedureleri ilgili triggerların içine koydum.

ON-INSERT procedure ü:

stn_p_TEFE_insert(:YIL,:OCAK,:SUBAT,:MART,:NISAN,:MAYIS,:HAZIRAN,:TEMMUZ,:AGUSTOS,:EYLUL,:EKIM,:KASIM,:ARALIK);

ON-UPDATE procedure ü:

stn_p_TEFE_update(:YIL,:OCAK,:SUBAT,:MART,:NISAN,:MAYIS,:HAZIRAN,:TEMMUZ,:AGUSTOS,:EYLUL,:EKIM,:KASIM,:ARALIK);

ON-LOCK procedure ü(ON-UPDATE ile aynı):

stn_p_TEFE_update(:YIL,:OCAK,:SUBAT,:MART,:NISAN,:MAYIS,:HAZIRAN,:TEMMUZ,:AGUSTOS,:EYLUL,:EKIM,:KASIM,:ARALIK);

ON-DELETE procedure ü:

stn_p_TEFE_delete(:YIL);



işlem bu kadar. hem düzgün bir tablo yapımız hem de kullanıcı için rahat bir kullanım sağladık. ekran görüntümüz de şu şekilde oldu;



siz daha iyi arayüzler yaparsınız eminim:)
hadi selametle...

19 Mart 2010 Cuma

c# combobox a item ekleme



combobox a item eklemek istiyorum. combobox.items.add diyip parantez açtığımda arkadaş benden object tipinde bişi istiyor.object ekliycek yani.güzel. arayüzde ayrı bir text gösterip arkada ayrı bir değer tutabiliriz. bunun için "object" dediği şeyi tanımlamalıyız.bu da bir class demektir.class ı tanımladık. iki adet öğeyi var. bu öğelere değer atan constructor ı nı yazdık.ayrıca ekranda düzgün gözükmesi için ToString i de override ettik.

public class MyComboBoxItem 
private string _name; 
private int _value; 

public MyComboBoxItem(string name, int value) 
_name = name; 
_value = value; 

public override string ToString() 
return _name; 

şimdi de combobox ımıza item ekledik. 

comboBox1.Items.Add(new MyComboBoxItem("Test", 134));

hadi bi de dataseti dönüp ekleme yapalım.


comboBox1.Items.Clear();
for (int i = 0; i <>
{
string sira= myDataset.Tables[0].Rows[i]["SIRA_NO"].ToString();
string text = myDataset.Tables[0].Rows[i]["ACIKLAMA"].ToString();
int val = Convert.ToInt32(myDataset.Tables[0].Rows[i]["IHALE_KALEM_ID"]);
cbCerceveKalem.Items.Add(new MyComboBoxItem("[" + sira+ "] " + val, valKIK));
}
hadi selametle...

18 Mart 2010 Perşembe

oracle da son işlem görmüş kayıt

bazen tablolardaki pk alanları trigger la veya sequence le atarız. insert yaparız veya update yaparız. burda insert veya update edilen kayıt bize gerekli ise şöyle bir kullanım hayat kurtarabilir.

INSERT INTO STN_HST_IHALE(
IHALE_KAYIT_NO ,
IHALE_ADI ,
IHALE_YILI ,
IHALE_TARIHI ,
USER_KODU ,
USER_DATE ,
ACIKLAMA ,
HST_ID ,
FIRMA_KODU
)
VALUES (
p_IHALE_KAYIT_NO ,
p_IHALE_ADI ,
p_IHALE_YILI ,
p_IHALE_TARIHI ,
p_user_kodu ,
sysdate ,
p_ACIKLAMA ,
p_HST_ID ,
p_firma_kodu
)
Returning HST_IHALE_ID INTO v_pk_id;

burda procedure içinde insert işlemi yapılıyor. fakat dikkat edilirse HST_IHALE_ID alanına değer atanmadan. çünkü bu alan trigger la atanıyor. fakat benim bu değere ihtiyacım var. "returning" burda bana pk alanımım değerini veriyor.
Haydi bismillah...
Ben sadece yıllarca karşıma çıkıp da bir bir çözdüğüm problemleri daha sonra "ulan ben bunu yapmıştım yaa" diyen bir programcıyım. ve artık o olmak istemiyorum. o yüzden bu blog a başlıyorum. artık ufak tefek ne olursa çözdüğüm problemleri buraya yazacağım ki derli toplu olsun. tekrar google da en iyi çözümü aramak için vakit kaybetmeyeyim. yani anlaşılacağı üzere bu blog önce kendim içindir. benden başkada faydalananlar olursa ne ala.