2010-10-03 5 views
1

Visual Basic i créé un programme qui ajoutent et retourne l'équipement, mon problème est, son parce que ma table d'emprunt et ma table d'équipements de retour sont dans une table only..representing ces champsmise à jour des champs dans Microsoft Access 2000 à

"Productnumber"

"productname"

"dateborrowed"

"datereturned"

« bo rrowername »

« statut »

ce que je veux faire ici est lorsqu'un utilisateur retourne un équipement, entrant dans les mêmes données sur les champs ferait des erreurs sur mon database..especially sur mon Productnumber parce que c'est mon clé primaire, donc j'ai décidé d'avoir une grille de données dans mon formulaire de retour d'équipement, donc si un utilisateur retourne un équipement, tout ce que je vais faire est de mettre à jour le champ datereturned dans ma base de données ... guys? pouvez-vous m'aider avec les codes?

+0

informations insuffisantes pour répondre –

+0

dites-moi, ce qui manque dans ma déclaration? – RedKing

+1

Je pense que vous devez faire plus de travail sur votre conception de table. Si productnumber est une clé primaire, il ne peut être "emprunté" et "retourné" qu'une seule fois ... –

Répondre

2

Comme vous n'avez pas indiqué à quoi vous avez spécifiquement besoin d'aide, je vais commencer par vous donner la simple requête pour effectuer la mise à jour, puis je vais vous montrer comment interagir avec Access.

La requête de mise à jour datereturned:

str = "UPDATE 'Your Table Name' SET datereturned = " & now ' This is your update query. 

La première chose à faire est de créer une connexion au Access Database:

 Dim connectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0; Ole DB Services=-4; Data Source=D:\Tecnical Stu"& _ 
"dy\Complete_Code\Ch08\data\NorthWind.mdb" 
     Dim dbConnection As System.Data.IDbConnection = New System.Data.OleDb.OleDbConnection(connectionString) 

Trouvé à:

http://p2p.wrox.com/ado-net/28703-how-vbulletin-net-connect-access-database.html

Suivant vous devez effectuer la mise à jour:

dbConnection .Open() 
str = "UPDATE 'Your Table Name' SET datereturned = " & now ' This is your update query. 
'string stores the command and CInt is used to convert number to string 
cmd = New OleDbCommand(str, cn) 
icount = cmd.ExecuteNonQuery 

Voici une classe qui vous permettra d'effectuer les interactions, facilement et simplement.

Imports System.Data.OleDb 
Public Class Form1 Inherits System.Windows.Forms.Form 
Dim cn As OleDbConnection 
Dim cmd As OleDbCommand 
Dim dr As OleDbDataReader 
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e as _ 
System.EventArgs) Handles MyBase.Load 
End Sub 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As_ 
System.EventArgs) Handles Button1.Click 
Try 
cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;_ 
Data Source=C:\emp.mdb;") 
'provider to be used when working with access database 
cn.Open() 
cmd = New OleDbCommand("select * from table1", cn) 
dr = cmd.ExecuteReader 
While dr.Read() 
TextBox1.Text = dr(0) 
TextBox2.Text = dr(1) 
TextBox3.Text = dr(2) 
' loading data into TextBoxes by column index 
End While 
Catch 
End Try 
dr.Close() 
cn.Close() 
End Sub 
End Class 
When you run the code and click the Button, records from Table1 of the Emp database will be displayed in the TextBoxes. 

Retrieving records with a Console Application 

Imports System.Data.OleDb 
Imports System.Console 
Module Module1 

Dim cn As OleDbConnection 
Dim cmd As OleDbCommand 
Dim dr As OleDbDataReader 

Sub Main() 
Try 
cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\emp.mdb;_ 
Persist Security Info=False") 
cn.Open() 
cmd = New OleDbCommand("select * from table1", cn) 
dr = cmd.ExecuteReader 
While dr.Read() 
WriteLine(dr(0)) 
WriteLine(dr(1)) 
WriteLine(dr(2)) 
'writing to console 
End While 
Catch 
End Try 
dr.Close() 
cn.Close() 
End Sub 

End Module 
Code for Inserting a Record 

Imports System.Data.OleDb 
Public Class Form2 Inherits System.Windows.Forms.Form 
Dim cn As OleDbConnection 
Dim cmd As OleDbCommand 
Dim dr As OleDbDataReader 
Dim icount As Integer 
Dim str As String 

Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As_ 
System.EventArgs) Handles MyBase.Load 

End Sub 

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As_ 
System.EventArgs) Handles Button2.Click 
Try 
cn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\emp.mdb;") 
cn.Open() 
str = "insert into table1 values(" & CInt(TextBox1.Text) & ",'" & TextBox2.Text & "','" &_ 
TextBox3.Text & "')" 
'string stores the command and CInt is used to convert number to string 
cmd = New OleDbCommand(str, cn) 
icount = cmd.ExecuteNonQuery 
MessageBox.Show(icount) 
'displays number of records inserted 
Catch 
End Try 
cn.Close() 
End Sub 
End Class 

à l'adresse:

http://www.startvbdotnet.com/ado/msaccess.aspx

+0

dois-je créer un autre module pour ce code? le long? – RedKing

+0

Je crée généralement une classe qui gère toutes les interactions de base de données, mais vous pouvez probablement accomplir des mises à jour simples en utilisant un sous-marin. –

+0

Qu'y a-t-il avec les guillemets autour des noms de table? Ce n'est pas un langage Jet/ACE valide, bien que votre couche d'interface de données puisse peut-être les supprimer avant de les envoyer à Jet/ACE. Je les laisserais certainement de côté, au cas où la plate-forme de l'interrogateur original serait en réalité VBA, et non VB. –

1

Vous devez diviser le produit et emprunter/données de retour en deux tables:

product: 
"productnumber" 
"productname" 

borrowed: 
borrowedID (use a simple autonumber) 
productnumber (foreign key linked to productnumber in the product table) 
"dateborrowed" 
"datereturned" 
"status" 
borrowerID (foreign key linked to borrower table) 

une troisième table pour les emprunteurs/clients seraient également être en ordre

borrowers: 
borrowerID 
"borrowername" 
+0

Pourquoi les diviser, si le datereturned est un seul champ et immédiatement pertinent à la table initiale? –

Questions connexes