Große MySQL-Dumps via Web importieren

Bei den meisten Webhostern steht einem zur Datenbankverwaltung phpMyAdmin zu Verfügung. Dieser hat meist das Problem das er nicht mit großen MySQL-Dumps umgehen kann, der Upload bleibt z.B. hängen oder der Browser hängt sich auf. Abhilfe schafft das PHP-Script bigdump.php von Alexey Ozerov.

Und so gehts:

1.) bigdump.php mit einem Editor Deiner Wahl öffnen.

2.) Datenbankverbindung im Script anpassen und (optional) gleich den Dateinamen des Dumps angeben.

1
2
3
4
5
6
7
$db_server   = 'localhost';
$db_name     = '';
$db_username = '';
$db_password = '';

// Other settings (optional)
$filename           = 'meindump.sql';     // Specify the dump filename to suppress the file selection dialog

3.) Bei relativ großen Dumps den Parameter MAX_QUERY_LINES im Script erhöhen. Ansonsten gibt das Script evtl. einen Fehler aus. Ich habe es bei mir auf 30000 gesetzt für einen Dump der ca. 50 MB groß war.

1
define ('MAX_QUERY_LINES',30000);

4.) Script speichern und zusammen mit dem Dump auf den Server hochladen.

5.) Script auf den Server aufrufen (http://www.meinserver.de/bigdump.php)

6.) Fertig!

Wer Probleme mit dem Charset nach einem Import haben sollte muss nochmal alle Tabellen löschen und sich den Parameter “$db_connection_charset” ansehen und dort das richtige Encoding setzen.

Hama MCE 52451 ersetzen mit Logitech Harmony

Die Windows Media Center Fernbedienung Hama MCE 52451 ist leider nicht in der Logitech Datenbank vorhanden. Um zu verhindern jeden Befehl einzeln zu Lernen gibt es folgende Lösung.

Mit der Harmony Software folgendes Gerät hinzufügen:

Typ: Media Center
Hersteller: Hama
Modell: VRC-1100

Damit sollte dann alles klappen.

ASP.NET Calendar: Hide PrevMonthText or NextMonthText

If you use the ASP.NET Calendar Control and want to hide the PrevMonthText or NextMonthText then you need to use the PreRender-Event from the Calendar-Control.

In this example I hide the PrevMonthText (Hyperlink) when the current year and month equals calendars visible year and month. Note: You must set/init the VisibileDate-Property in Page_Load-Event. In my example I want that the start month and year of the control is set to today.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                MyCalendarControl.VisibleDate = DateTime.Now;
            }
        }

        protected void MyCalendarControl_PreRender(object sender, EventArgs e)
        {
            // hide previous month link in calendar when current month and year equals calendars month and year
            MyCalendarControl.PrevMonthText = DateTime.Now.Month == EventsCalendar.VisibleDate.Month &&
                                              DateTime.Now.Year == EventsCalendar.VisibleDate.Year
                                               ? string.Empty
                                               : "<";
        }

ASP.NET AjaxControlToolkit with IE9 Beta

When I use the ASP.NET AjaxControlToolkit with the ToolkitScriptManager in Internet Explorer 9 Beta I get on every asynchronous postback javascript errormessages like “Invalid set operation on read-only property”. Adding this HTML-Metatag

1
<meta http-equiv="X-UA-Compatible" content="IE=8" />

should fix it. But this is just a workaround not a solution.

ASP.NET Forums Thread:

http://forums.asp.net/p/1602520/4084902.aspx

AjaxControlToolkit Issue-Tracker:

http://ajaxcontroltoolkit.codeplex.com/workitem/26832

ListView: FindControl im EditItemTemplate

Hier eine einigermaßen vernünftige Lösung um in einem ListView WebControls im EditItemTemplate anzusprechen und Daten vom ListViewDataItem daran zu binden. Ersteres, also das ansprechen der WebControls, ist über den Event “OnItemEditing” kein Problem. Hier liegt beim DataItem der Hase im Pfeffer. Bisher habe ich keine Lösung gefunden an das DataItem im “OnItemEditing”-Event zu kommen. Der logische Versuch über

1
var dataItem = MyListView.Items[e.NewEditIndex].DataItem;

an das ListViewDataItem zu kommen schlug fehl, da es immer Null ist.

Nach langem tüfteln habe ich nun eine gute Lösung gefunden. Im “ItemDataBound”-Event wird neben dem ItemType auch der DisplayIndex mit dem EditIndex verglichen. Ist dieser gleich und der EditIndex ist gesetzt (else if-zweig) befinden wir uns EditItemTemplate und können auf die WebControls und das ListViewDataItem zugreifen.

Beispiel:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        protected void MyListView_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            if (e.Item.ItemType == ListViewItemType.DataItem && e.Item.DisplayIndex != MyListView.EditIndex)
            {
                 //ItemTemplate
                 //Hier können ganz normal die WebControls des ItemTemplates per FindControl angesprochen werden.
            }
            else if(MyListView.EditIndex > -1 &&  e.Item.DisplayIndex == MyListView.EditIndex)
            {
                //EditItemTemplate

                var dataItem = (BeispielObject)((ListViewDataItem)e.Item).DataItem;

                var editItemDropDownList = (DropDownList)e.Item.FindControl("EditItemDropDownList");
                editItemDropDownList .DataSource = BusinessLogic.GetDataSource();
                editItemDropDownList .DataBind();
                forumCategorieDropDownList.SelectedValue = dataItem.Value;                          
           }
        }