我正在维护一个链接到MSSQL2000数据库的多用户Access 2000 DB,而不是我编写的.
数据库设计很差,所以你必须忍受我.
在"客户"表单上有一个"Customer_ID"字段,默认情况下需要获取下一个可用的客户ID,但用户可以选择使用现有客户ID覆盖此选项.
现在,Customer_ID字段不是Customer表的PK.它也不是唯一的.
如果客户拨打两次提交作业,该表将获得两条记录,每条记录具有相同的客户信息和相同的客户ID.
如果用户创建新票证,Access会快速查找下一个可用的客户ID并将其填入.但它不会保存记录.显然是一个问题 - 两个用户编辑必须跟踪彼此的工作,这样他们就不会欺骗客户ID.
所以我想修改"新记录"按钮,以便在创建新票据后立即保存票证.
问题是,当我测试更改时,我得到"此记录已被其他用户更改,因为您开始编辑它".
绝对没有DB上的其他用户."其他用户"可能是我被迫保存的.
有任何想法吗?
我习惯脚本语言.PHP,Javascript等,我写了一些相对简单的Java和C#应用程序.这是一个我一再需要答案的问题,我想我不是唯一一个.
假设我使用的是Javascript.
我有一个由GUI调用的函数A(),它检索一些值.
函数B(),也由GUI调用,需要该值,但函数B()将被调用任意次数,即A()之后的任意长度.
我不希望A()每次重新计算值.
一个示例是登录凭据.A()要求输入用户名,B()使用该值在每次调用时追加到日志中.
为此我可能只使用一个全局变量.
现在,C#.没有全局变量!我该怎么做?
编辑: 享受答案,但有很多"尽量不使用全局"的评论.我明白了,但我想听听这个要求的替代模式.
我的理解是,如果我想获取列表中项目的ID,我可以这样做:
private static void a()
{
List<string> list = new List<string> {"Box", "Gate", "Car"};
Predicate<string> predicate = new Predicate<string>(getBoxId);
int boxId = list.FindIndex(predicate);
}
private static bool getBoxId(string item)
{
return (item == "box");
}
Run Code Online (Sandbox Code Playgroud)
但是如果我想让比较动态呢?因此,我不想检查item =="box",而是将用户输入的字符串传递给委托,并检查item == searchString.
我正在使用LDAP查询执行ADODB recordset.open()命令以从我的Active Directory获取所有用户.
大约有2600个用户,但我只回来了1000个用户.
我试过没有运气就改变了记录集的PageSize和MaxRecords属性.
没有多余的东西,这就是代码的样子(我已经将连接细节设为通用):
ADODB.Connection conn = new ADODB.Connection();
ADODB.Recordset rs = new ADODB.Recordset();
rs.MaxRecords = 10000;
rs.PageSize = 10000;
conn.Open("Active Directory Provider","","",0);
string query = "SELECT cn FROM 'LDAP://OU=User Accounts,OU=TopLevel,DC=domainName,DC=local' where samAccountName = '*'"
rs.Open(query, conn, ADODB.CursorTypeEnum.adOpenKeyset, ADODB.LockTypeEnum.adLockOptimistic, -1);
Run Code Online (Sandbox Code Playgroud)
它肯定只返回1000条记录,(我已经确认),我可以很好地访问它们.
如果它有帮助,我没有使用DirectorySearcher的原因是因为它与此相比速度太慢.
我在Word 2003中有一个相当简单的VBA,它将文档的字体更改为"eco font"(长篇故事),然后打开"打印"对话框.
当用户点击"取消"或"确定"时,代码会执行"撤消"以还原更改.
问题是,有时当我按"确定"打印文档时,需要撤消两个操作('字体更改'和'更新字段').我似乎无法预测何时会发生这种情况.
有没有办法读取Word的撤消缓冲区中的最后一项?这样我就可以继续按下撤消,直到字体更改完成.
编辑: 最终代码(缩减):
ActiveDocument.Range.Bookmarks.Add ("_tempEcoUndoStart_")
ActiveDocument.Content.Font.Name = "Nanonymus Eco Sans"
Dialogs(wdDialogFilePrint).Show
While ActiveDocument.Bookmarks.Exists("_tempEcoUndoStart_")
ActiveDocument.Undo
Wend
Run Code Online (Sandbox Code Playgroud) 任何在Office 2003中使用VBA的人都会知道,每次点击一行时都会进行语法检查,这是非常令人沮丧的.
例如,如果我开始编写一行代码,我可能会去
For Each application In
Run Code Online (Sandbox Code Playgroud)
然后想想"垃圾,应用程序集合叫什么?" 所以我会点击"向上翻页"找到它,并获得(在这种情况下)"编译错误".
我能把它关掉吗?
这是一个非常通用的"最佳实践"问题,但这是一个例子.
假设我有一个电影编目应用程序.我想让我的用户有机会为他们的概要/评级信息指定IMDb或Metacritic.
我这样做:
if (preferredSupplier == "imdb"){
getIMDbRating(movieName);
}else{
getMetacriticRating(movieName);
}
Run Code Online (Sandbox Code Playgroud)
或这个:
getRating(movieName, preferredSupplier);
Run Code Online (Sandbox Code Playgroud)
我更喜欢第二个,但这意味着函数必须遵循非常不同的逻辑,具体取决于第二个参数的值(例如,Metacritic可能需要屏幕抓取,其中IMDb可能有一个很好的API).
或者我应该结合它们?在getRating()中充当包装函数,并根据第二个参数的值调用getIMDbRating()或getMetacriticRating().
有没有办法,在C#中,一个类或方法知道谁(即什么类/方法)调用它?
例如,我可能有
class a{
public void test(){
b temp = new b();
string output = temp.run();
}
}
class b{
public string run(){
**CODE HERE**
}
}
Run Code Online (Sandbox Code Playgroud)
输出:"由'a'类的'test'方法调用."
警惕Jeff Atwood的" 浴室墙代码 "帖子,我认为为VBScript提供值得信赖的SQL清理功能会很有用,类似于PHP的mysql_real_escape_string()功能.
那么,如何使用VBScript正确清理数据输入到SQL查询?
是否可以将ListBox.SelectedObjectCollection转换为C#中的ListBox.ObjectCollection?如果是这样,我该怎么办呢?
我正在写一个ASP(经典)Javascript的快速网站.
我正在使用带参数的预准备语句.没什么特别的.
我的问题是我是否需要清理参数的输入(如果是这样,是否有像PHP这样的本机函数?),或者我使用参数而不是连接内联SQL这一事实让我安全吗?
//Set up the command to run the GetMigrationDate stored procedure.
var command = new ActiveXObject("ADODB.Command");
command.CommandText = "exec myStoredProc ?";
//Set up parameters
command.Parameters.Append(command.CreateParameter("name", 200, 1, 255));
command.Parameters("name") = name;
//Set up result recordset
var results = new ActiveXObject("ADODB.Recordset");
//Run command
results.open(command);
Run Code Online (Sandbox Code Playgroud)
[编辑]存储过程是这样的:
@name varchar(255)
select * from customers where name = @name
Run Code Online (Sandbox Code Playgroud) c# ×5
sql ×3
parameters ×2
vba ×2
.net ×1
adodb ×1
casting ×1
class ×1
collections ×1
delegates ×1
function ×1
list ×1
listboxitems ×1
ms-access ×1
ms-word ×1
predicate ×1
recordset ×1
sanitization ×1
undo ×1
vbscript ×1