Blog Schröder

Sammlung von Codeschnipseln zu Programmierproblemen.
Daten aus fremden Quellen unterliegen deren Rechten.
Siehe auch: Disclaimer auf www.computer-schroeder.de

Sonntag, 28. Oktober 2007

multipart identifier ... could not be bound

Dies bezieht sich darauf, wenn ein Accessprojekt (ADP) auf einen SQL Server greift, den es  noch nicht kennt (z.B. Access 2003 auf SQL Server 2005).

Mit Multipart identifier ist sowas gemeint wie TabAlias.Feldname (A.ID oder so).
Der Fehler kommt aus dem SQL Server und folgende gefundene Hinweis lauten:
" Oh, yes - is there an IPCode yolumn in the dbo.ClassifiedAd table?
If so, then the optimizer might have processed the explicit join (... JOIN
ON ...) before the implicit one (FROM dbo.ClassifiedAd Ad, dbo.Objects O ...
WHERE ...)"
"Why are you mixing join types (old-style vs. ANSI)? Why do you not use the
alias prefixes on all of your columns? I'll try to re-write this so the
parser understands it, but I have no idea what your table structure looks
like, so I can't fix all the prefixes."
(s.http://www.dbtalk.net/microsoft-public-sqlserver-programming/multipart-identifier-304262.html)

Geholfen hat mir: Ohne Wizzards in der SQL-Anweisung die Tabellenaliase (auch vor den Feldnamen) zu entfernen. Im betreffenden Fall jedenfalls war das möglich ;-)

Nachtrag:
Es genügt, wenn in der ORDER BY- Klausel keine Tabellenqualifizierer stehen (ggf. Spaltenaliase verwenden)

Labels: , ,

Donnerstag, 25. Oktober 2007

Static in Klasse

Static-Variablen sind nur in Prozeduren erlaubt. Um sie über Prozedurgrenzen zu verwenden, kapsele ich diese in eine Funktion. Auf diese wiederum könnte bei Bedarf ein Property zugreifen. Diese "Variable" behält auch nach einem PostBack ihren Wert.

Function myName(Optional ByVal value As myType= Nothing) As myType
Static staticMember As myType= myStartwert
If value =Nothing Then Return staticMember
staticMember = value
Return value
End Function

Leseaufruf: x= myName
Schreibaufruf: myName(y)

(Es scheint, daß dies einen PostBack doch nicht überlebt)

Labels: , , ,

For Each in Dictionary

Wenn das Dictionary beliebige Objekte enthält:

For Each s As String In myDict.Keys
x = myDict(s).member
...
'oder
Dim m as myObj=myDict(s)
x=m.member
...
Next

Labels: , , , ,

Mittwoch, 24. Oktober 2007

QueryString übernehmen (IFrame in DotNetNuke...)

myVar as String= My.Request.QueryString("VarNameInQueryString")
Beispiel:
Me.lblUser.Text = My.Request.QueryString("UserName")
Me.lblCaption.Text = My.Request.QueryString("UserFullName")

Labels: , , ,

Mittwoch, 17. Oktober 2007

DotNetNuke: Reports mit ReportViewer

Labels: , ,

Montag, 15. Oktober 2007

Access: Dateisystem

Das Beispiel:
Zugriff auf Ordner mit Vorlagen

In Modul (erlaubt zentralen Zugriff):
Public tmplateList 'enthält die Namen der Dateien

Bei Startform (einmalig, da hier der aufwendige Zugriff):
Dim filesys
Dim tmplatePath
Set filesys = CreateObject("Scripting.FileSystemObject")
Set tmplatePath = filesys.GetFolder(_
Application.CurrentProject.Path & templatePath & "\")
Set tmplateList = tmplatePath.files 'enthält die Liste

Eintragen in Combobox (im Combo-Form):
Dim f 'Vollständiger Name mit Pfad
Dim n 'nur der Dateiname ohnePfad und Endung
For Each f In tmplateList
If Right(f, 4) = ".dot" Then
n = Left(f, Len(f) - 4)
n = Right(n, Len(n) - InStrRev(n, "\"))
kmbDateilist.AddItem (f & ";" & n)
End If
Next

Labels: , , , , , ,

Samstag, 13. Oktober 2007

"????????" als Wert eines SQL Server-GUID-Feldes angezeigt

Problembeschreibung
Wenn Sie mit VBA-Code (VBA = Visual Basic für Applikationen) den Wert einer Jet-Replikations-ID oder eines SQL Server-GUID-Feldes (GUID = Globally Unique Identifier) abrufen und anzeigen, erhalten Sie den Wert "????????".
Ursache
Ein GUID ist ein 16-Byte-Datenfeld, das konvertiert werden muss, um von Microsoft Access interpretiert werden zu können.
Lösung
Konvertieren Sie das GUID-Feld mit der Funktion StringFromGUID() in eine Zeichenfolge, damit Access ein GUID-Feld richtig interpretieren und anzeigen kann. Wenn Sie z.B. den folgenden Code auf ein offenes Formular anwenden, in dessen Datensatzherkunft ein GUID-Feld enthalten ist, sehen Sie eine Zeichenfolge hexadezimaler Zahlen in geschweiften Klammern, denen das Wort "guid" vorangestellt ist, wiederum in geschweifte Klammern gesetzt.
Beachten Sie, dass
Debug.Print StringFromGUID(Forms![Formularname]![GUIDFeldname])
etwa so angezeigt wird:
{guid {3B9B63A3-863D-11CF-8CAE-00AA00C0016B}}
aus Microsoft Knowledge Base: 278099 (http://support.microsoft.com/kb/278099/en-us/)

Extraktion und Aufbereitung:

Function °°StringFromGUID(guid As Control) As String
Dim s As String
s = StringFromGUID(guid)
s = Right(s, Len(s) - 6)
°°StringFromGUID = Left(s, Len(s) - 1)
End Function

Labels: , , ,

Donnerstag, 11. Oktober 2007

ASP.NET-Benutzersteuerelement programmgesteuert erstellen

1. Stellen Sie sicher, dass die @ Control-Direktive des Benutzersteuerelements ein ClassName-Attribut enthält, das dem Benutzersteuerelement eine Klasse zuweist, um das Benutzersteuerelement strikt zu typisieren.
<%@ Control className="MyUserControl" %>
2. Erstellen Sie in der Seite, in der Sie mit dem Benutzersteuerelement arbeiten möchten, unter Verwendung der @ Reference-Direktive einen Verweis auf das Benutzersteuerelement.
Beim programmgesteuerten Erstellen eines Benutzersteuerelements steht der ASP.NET-Webseite die strikte Typbindung für das Benutzersteuerelement erst zur Verfügung, nachdem ein Verweis darauf erstellt wurde. Mit folgendem Code wird z. B. ein Verweis auf ein Benutzersteuerelement erstellt, das in der Datei MyUserControl.ascx erstellt wurde.
<%@ Reference Control="MyUserControl.ascx" %>

Hinweis
Verwenden Sie @ Reference, wenn Sie beabsichtigen, das Steuerelement programmgesteuert zu laden.
Verwenden Sie @ Register, wenn Sie der Seite ein Benutzersteuerelement deklarativ hinzufügen.
3. Erstellen Sie mit dem Klassennamen des Steuerelements eine Instanzvariable für das Benutzersteuerelement. Die Klasse ist Teil des ASP-Namespaces.
Protected Spinner1 As ASP.Spinner
4. Erstellen Sie im Code eine Instanz des Benutzersteuerelements, indem Sie die LoadControl-Methode aufrufen.
5. Weisen Sie je nach den Erfordernissen Eigenschaftenwerte zu, und fügen Sie das Steuerelement dann der ControlCollection-Auflistung eines Containers auf der Seite zu.
Hinweis
Wenn Sie dem ControlCollection-Objekt mit der Add-Methode Steuerelemente hinzufügen, werden die Steuerelemente in der Reihenfolge ihrer Verarbeitung in der Auflistung platziert. Wenn Sie ein Steuerelement an einer bestimmten Position in der Auflistung hinzufügen möchten, verwenden Sie die AddAt-Methode und geben die Indexposition an, an der Sie das Steuerelement speichern möchten.

Beispiel
<%@ Page Language="VB" %>
<%@ Reference Control="~\Controls\Spinner.ascx" %>

<script runat="server">
Private Spinner1 As ASP.Spinner
Protected Sub Page_Load(ByVal sender As Object, _
        ByVal e As System.EventArgs)
    Spinner1 = CType(LoadControl("~\Controls\Spinner.ascx"), _
        ASP.Spinner)
    ' Set MaxValue first.
    Spinner1.MaxValue = 20
    Spinner1.MinValue = 10
    PlaceHolder1.Controls.Add(Spinner1)
End Sub

Protected Sub Button1_Click(ByVal sender As Object, _
      ByVal e As System.EventArgs)
    Label1.Text = Spinner1.CurrentNumber.ToString()
End Sub
</script>
<html>
<head id="Head1" runat="server">
  <title>Load User Control Programmatically</title>
</head>
<body>
  <form id="form1" runat="server">
    <div>
      <asp:PlaceHolder runat=server ID="PlaceHolder1" />
      <br />
      <asp:Button ID="Button1" runat="server"
        Text="Button"
        OnClick="Button1_Click" />
      <br />
      <br />
      <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
    </div>
  </form>
</body>
</html>
(Auszug von http://msdn2.microsoft.com/de-de/library/c0az2h86(VS.80).aspx)

Labels: , , ,

Mittwoch, 10. Oktober 2007

Pop-Up unblockbar

web20popup.jpg

Umsetzung: JavaScript und CSS.
Link: http://orangoo.com/labs/GreyBox/.
Auf dieser Seite gibt es eine Komponente (JavaScript) die bei der Umsetzung hilft.

Vorteile:Post veröffentlichen

  • Nicht durch PopUp-Blocker verhindert, da es kein neues Fenster ist
  • Klein (22kb)
  • Auf viele Websites eingesetzt, also wohl stabil

Labels: , ,

Freitag, 5. Oktober 2007

Wartemeldungen für Benutzer - Response.write

http://www.devtrain.de/news.aspx?artnr=866

Labels: ,

AutoCompleteExtender - Clientseitig auf Auswahl reagieren

http://blog.thomasbandt.de/53/1689/de/aspnet/aspnet-ajax/autocompleteextender ---clientseitig-auf-auswahl-reagieren.aspx
(Leerzeichen entf.)

Labels: , ,

Mittwoch, 3. Oktober 2007

Telefonwahl mit acCmdAutoDial

Private Sub btnAnwTelNr_Click()
On Error GoTo Er

txtTelNr.SetFocus
DoCmd.RunCommand acCmdAutoDial

Ex: Exit Sub
Er: MsgBox "Fehler " & Err.Number & " in btnAnwTelNr_Click" & vbCrLf & Err.Description
Resume Ex
End Sub

Labels: , , , , ,