This Blog

Syndication

News

Awards

Microsoft MVP Logo
Grab this badge here!

Certificates

Transcript ID#: 6724122
Brainbench ASP.NET Certificate
 
Brainbench ASP.NET 2.0 Certificate
 
Brainbench .NET Framework 2.0 Certificate

Ahmad Masykur

var myObject = { "languages" : [ "C#", "VB.NET", "ASP.NET", "Javascript", "SDCC", "Assembler" ] }; //

February 2009 - Posts

  • Excel Features Disabled

    Sempat stress dengan fitur-fitur MS Excel tiba-tiba disabled seperti gambar di bawah. Beberapa fiitur di bawah tidak bisa diakses lagi.

    image

    Edit > Delete
    Edit > Links
    Edit > Object
    Format > Cells, Alignment tab, "Merge cells"
    Insert > Name
    Insert > Picture
    Insert > Diagram
    Insert > Hyperlink
    Tools > Spelling
    Tools > Error Checking
    Data > Filter
    Data > Subtotals
    Data > Validation
    Data > Table
    Data > Text To Columns
    Data > Group and Outline
    Data > Import Extermal Data
    Data > List
    Data > XML
    Data > Refresh Data

    Coba untuk cek security setting, enable ActiveX, dan configurasi macem-macem tidak pengaruh. Googling ke beberapa situs juga tidak ketemu pangkal masalahnya. Coba save as ke Excel 2003 dan buka di Excel 2003 tetep tidak begeming, beberapa fitur masih tidak bisa diakses.

    Permasalahan ketahuan setelah saya coba membuat workbook baru dan salin (copy) satu sheet, anehnya koq yang tersalin koq dua sheet. Setelah dilihat ternyata dua sheet dalam keadaan terpilih (selected).

    image

    Untuk melepas pilihan (unselect) telak Ctrl dan klik pada salah satu sheet yang akan dilepas. Setelah sheet tersebut terlepas, Alhamdulillah fitur-fitur yang tadinya tidak bisa diakses dapat diakses kembali.

    image 

    image

    Share this post: | | | |
    Posted Feb 17 2009, 02:43 PM by cahnom with no comments
    Filed under:
  • Parsing Array Parameter pada SQL Server Stored Procedure

    Pada waktu membuatt aplikasi yang didalamnya terdapat grid yang dapat dipilih beberapa data. Data tersebut kemudian akan diproses di stored procedure dalam sekali panggil, baik diupdate maupun delete.  Kita butuh mempasing nilai dari data yang dipilih ke stored procedure. Yang jadi masalaha adalah SQL Server tidak menyediakan array sebagai parameter dalam stored procedure. Beberapa cara diantaranya adalah.

    1. Gunakan keyword EXEC untuk menjalankan dynamic query dan memparsing nilai parameter dalam WHERE clause.

    2. Gunakan XML sebagai parameter dengan keyword OPENXML untuk mengubah XML ke table.

    Cara pertama memang sangat mudah tapi bukan cara yang baik untuk menggunakan dynamic query. SQL Server tidak dapat menyimpan statistic dari dynamic query. Cara kedua lebih baik tapi stored procedure menjadi lebih kompleks. Saya butuh cara yang lebih sederhana.

    Cara lain adalah dengan membuat function yang akan merubah string dengan karakter pembatas menjadi sebuah table. Berikut adalah contoh fungsi tersebut.

    CREATE FUNCTION [dbo].[fn_ParseDelimitedStrings](@String nvarchar(MAX), @Delimiter char(1)) RETURNS @Values TABLE ( RowId int Not Null IDENTITY(1,1) PRIMARY KEY ,Value nvarchar(255) Not Null ) AS BEGIN DECLARE @startPos smallint ,@endPos smallint IF (RIGHT(@String, 1) != @Delimiter) SET @String = @String + @Delimiter SET @startPos = 1 SET @endPos = CharIndex(@Delimiter, @String) WHILE @endPos > 0 BEGIN INSERT @Values(Value) SELECT LTRIM(RTRIM(SUBSTRING(@String, @startPos, @endPos - @startPos))) -- remove the delimiter just used SET @String = STUFF(@String, @endPos, 1, '') -- move string pointer to next delimiter SET @startPos = @endPos SET @endPos = CHARINDEX(@Delimiter, @String) END RETURN END

    Pada stored procedure kita dapat gunakan fungsi tersebut untuk memfilter data seperti contoh berikut.

    CREATE PROCEDURE GetCustomers @customerIDs AS nvarchar AS BEGIN DECLARE @custIDs AS table (Value nvarchar(255) Not Null) INSERT INTO @custIDs SELECT Value FROM [fn_ParseDelimitedStrings](@customerIDs, ',') SELECT * FROM Orders WHERE CustomerID IN (SELECT Value FROM @custIDs) END

    Stored procedure menjadi sangat sederhana. Cukup mendeklarasikan memory table dan memasukkan hasil function ke dalam table tersebut yang kemudian dapat dijadikan sebagai filter dalam query.

    Semoga bermanfaat. Versi Bahasa Inggris dari tulisan ini dapat dibaca di sini. (Biar gak ada yang komplain :p)

    Share this post: | | | |
  • Perbaikan Prayer Time Widget untuk BlogEngine.NET

    Sebulan yang lalu saya telah membuat Prayer Time widget yang memanfaatkan service IP to geo. Service tersebut sekarang sudah tidak dapat digunakan lagi. Sebagai gantinya saya gunakan service dari hostip.info. Service hostip.info tidak terlalu handal dan mencakup semua IP di seluruh dunia, namun service ini lebih stabil daripada sevice yang saya gunakan sebelumnya.

    Berikut adalah potongan kode yang saya guakan untuk mengambil informasi lokasi dari service hostip.info.

    WebClient webClient = new WebClient();
    string responseString = null;
    try
    {
        responseString =
            webClient.DownloadString(string.Format("http://api.hostip.info/get_html.php?ip={0}&position=true",
                                                   ipAddress));
    }
    catch (WebException)
    {
        responseString = string.Empty;
    }
    catch (Exception)
    {
        responseString = string.Empty;
    }
    Regex regex = new Regex("Country\\:\\s(?<Country>[A-Za-z0-9]+)\\s\\((?<CountryId>[A-Z]{2})\\)\\nCity\\:\\s(?<City>[A-Za-z0-9]+)\\nLatitude\\:\\s(?<Latitude>\\-?[0-9\\.]+)\\nLongitude\\:\\s(?<Longitude>\\-?[A-Za-z0-9\\.]+)");
    if (!string.IsNullOrEmpty(responseString))
    {
        Match m = regex.Match(responseString);
        if (m.Success)
        {
            city = m.Groups["City"].Value;
            country = m.Groups["Country"].Value;
            countryId = m.Groups["CountryId"].Value;
            longitude = m.Groups["Longitude"].Value;
            latitude = m.Groups["Latitude"].Value;
        }
    }

    Kode secara lengkap dapat didownload dari sini.

    Semoga versi ini lebih stabil dari sebelumnya.

    Share this post: | | | |